嵌入式Linux的组成:
本文的目的是介绍uboot、linux内核、根文件系统的构建,mfgtool工具烧写系统,读者能够使用uboot、linux内核、busybox的源码编译出供mfgtool烧写的系统需要的三大组件(uboot、内核、根文件系统),能在嵌入式Linux板卡上将Linux系统运行起来。
Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间。
常见的bootloader有Redhat公司的Redboot、ARM平台的ARMboot、由开源项目PPCBoot发展起来的U-Boot。
官网地址:http://www.denx.de/wiki/U-Boot/,nxp在此基础上,针对自己的芯片有自己的版本,可以在这里下载到nxp维护的uboot版本。
安装必要的库。
sudo apt-get install libncurses5-dev
编译uboot有三个步骤:清空工程、配置工程、编译工程。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
配置文件在源码根目录下的configs文件夹里,每一个配置都是针对特定开发板的配置。
在ubuntu中通过imxdownload工具将编译出的u-boot.bin下载到sd中(sd卡通过读卡器接入电脑)。
./imxdownload u-boot.bin /dev/sdd
set date 12/23 修改,如果之前没有date环境变量则增加date变量
set date 删除date变量
md.w 80000000 10 查看内存里从0x80000000开始的16个word长度的数据
输入 nm.l 80000000后会打印0x8000000处的内容,
接着输入需要往该内存写入的值。
mw.l 80000000 0A0A0A0A 10
用0a0a0a0a0填充从8000000开始的10个数据。
设置boot的环境变量
setenv ipaddr 192.168.1.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.250
saveenv
Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。
Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。
内核地址在https://www.kernel.org/,nxp发布的linux版本在这里。
首先安装lzop软件包。
sudo apt-get install lzop
编译Linux内核有四个步骤:清空工程、配置Linux的平台、配置Linux功能、编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
编译后会在arch/arm/boot目录下产生zImage的文件,这个就是内核映像,在arch/arm/boot/dts下产生.dtb后缀的设备树文件。
根文件系统(rootfs)是Linux组织文件的方式,Linux中一切皆文件,对于一个没有根文件系统的操作系统,在Linux启动后会发生内核崩溃的错误。根文件系统和uboot、Linux内核一样作为Linux系统的组成部分,属于一种软件。
Linux根目录下的几个目录的作用:
busybox是一个集成了Linux常用工具的软件,比如ls、ifconfig,可以在busybox官网获取到源码。