上篇文章中咱们现已能够经过u-boot发动内核了,可是没有能够发动成功,从内核的log中能够看出,内核发动失利的原因是没有挂载到root文件体系,本文将运用busybox制造根文件体系并打包成ramdisk供u-boot发动内核运用。
(1)制造根文件体系
运用busybox构建根文件体系的过程能够参阅本博客的别的一篇文章,该文章链接如下:
S5PV210(TQ210)学习笔记——内核移植与文件体系构建
需求弥补的是,文章”S5PV210(TQ210)学习笔记——内核移植与文件体系构建”中记载rootfs文件体系构建时漏掉了一步,没有在etc/sysconfig/目录下创立HOSTNAME文件,能够手动增加HOSTNAME文件,其内容为主机称号,本文运用了tq335x。在rootfs目录能够经过如下指令创立:
- echotq335x>etc/sysconfig/HOSTNAME
本文在已制造好的rootfs基础上,制造ramdisk。
(2)制造ramdisk
制造ramdisk的方法许多,最便利的是运用指令genext2fs。ubuntu操作体系上能够经过apt-get东西直接装置genext2fs东西:
- sudoapt-getinstallgenext2fs
其它操作体系也有相似的管理东西,这儿就不一一列举了,下面运用genext2fs打包rootfs目录。指令如下:
- genext2fs-b4096-drootfs/ramdisk
然后运用gzip指令紧缩ramdisk:
- gzip-9-framdisk
履行完结该指令后能够得到文件ramdisk.gz。
因为u-boot发动内核运用的ramdisk需求有u-boot的image头,故需求运用编译u-boot时生成的东西mkimage将ramdisk.gz制造为ramdisk.img。其间,东西mkimage坐落u-boot的tools目录下,制造ramdisk.img的指令如下:
- u-boot-2014.10/tools/mkimage-Aarm-Olinux-Tramdisk-Cnone-a0x88080000-n”ramdisk”-dramdisk.gzramdisk.img
指令中mkimage前的途径依据自己实践履行的途径指定即可。
这样,就完结了u-boot能够运用的ramdisk制造,然后将ramdisk.img复制到SD卡的boot目录下即可。
(3)挂载ramdisk
旧式的ATAGS方法发动内核时运用ATAG传递bootargs给内核,因为本文运用的dtb方法发动内核,故采纳dtb的chosen方法传递bootargs给内核。
Step1: 修正内核装备
- makeARCH=armmenuconfig
进入装备项:
- Bootoptions—>
按N键撤销装备项:
- []UseappendeddevicetreeblobtozImage(EXPERIMENTAL)
官方内核默许启用了该项装备。启用该项装备后内核兼容旧式的ATAGS方法内核发动,封闭后则运用新式的dtb方法发动,故此处禁用了此项装备。
按ESC保存装备后退出menuconfig画面,从头编译内核:
- makeARCH=armCROSS_COMPILE=arm-linux-gnueabi–j8
Step2:增加bootargs到dtb
切换到内核目录arch/arm/boot/dts/,复制am335x-evm.dts为tq335x.dts:
- cpam335x-evm.dtstq335x.dts
翻开tq335x.dts,在memory项后经过chosen方法增加bootargs,增加内容如下:
- memory{
- device_type=”memory”;
- reg=<0x800000000x10000000>;/*256MB*/
- };
- chosen{
- bootargs=”console=ttyO0,115200n8root=/dev/ram0″;
- };
- …
其间chosen节点是新增加的,memory节点是原有的。
接下来从头编译dtb:
- makeARCH=armCROSS_COMPILE=arm-linux-gnueabi-tq335x.dtb
将新编译得到的tq335x.dtb复制到SD的boot目录下。至此,准备工作就完结了,下面咱们运用新制造的ramdisk.img和tq335x.dtb发动内核。
Step3:运用新制造的ramdisk.img和tq335x.dtb发动内核
将SD插到开发板上,给开发板上电(开发板切换到SD卡发动形式),能够经过按任意键打断内核发动进入u-boot指令形式(因为之前没有装备u-boot的bootcmd环境变量,而默许的u-boot环境无法发动内核,故,开发板上电后不按键的话也会进入u-boot的指令行形式)。
首先是加载内核到DRAM:
- loadmmc0${loadaddr}/boot/zImage
其间,${loadaddr}在u-boot的环境变量中默许指定为0x82000000,这儿能够直接打数字。
然后是加载dtb到DRAM:
- loadmmc0${fdtaddr}/boot/tq335x.dtb
${fdtaddr}的默许值是0x88000000。