Firefly Ubuntu开发入门之(2)运行内核
1、准备初始RAM皈撮踢赓磁盘。 初始RAM磁盘(initrd)是在实际根文件系统可用之前挂载到系统中的一个初镫炜茛玳始根文件系统。initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。 内核会将这个initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。initrd中包含了实现这个目标所需要的目录和可执行程序的最小集合,例如将内核模块加载到内核中所使用的 insmod工具。 在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生存周期很短,只会用作到真实文件系统的一个桥梁。 Firefly团队为方便开发者进行项目,在github上创建initrd的仓库,开发者可以直接clone使用。cd ~/UbuntuDev/git clonehttps://github.com/TeeFirefly/initrd.gitmake -C initrd 有兴趣深入去了解initrd的朋友,也可以自行去研究。
2、Firefly官方发布的Ubuntu系统都是只有boot分区的,所以要将 kernel 和 initrd 打包成 boot.img,在烧录到指定分区怪寄拮惋才能上kernel飞~~这里实际操作的方式和上篇讲的稍微有些区别,生成boot镜像用到了一个新工具mkbootimg,放至kernel根目录。生成镜像的命令如下,记得给mkbootimg增加可执行属性:cd ~/UbuntuDev/firefly-3.14-kernel/./mkbootimg --kernel arch/arm/boot/zImage --ramdisk ../initrd.img --second resource.img-o boot.img 这里的resource.img可以由make -j8 firefly-rk3288.img得到。
3、确认parameter文件。 Linux 的根文件系统(RFS)可能在不同的分区或存储设备上(eMMC、TF 卡或 U 盘),所以需要在内核的参数CMDLINE中指定。如何修改内核CMDLINE参数?在parameter文件中修改CMDLINE行即可。为什么要提到这个parameter文件?烧录boot.img在开发板时,烧录工具里需要用到此文件。 在板子启动时,内核会打印CMDLINE参数,可以用以确认板子的分区等信息。更新boot分区时,要按板子里原本的CMDLINE参数,去更新分区,才不会造成异常。另外,请确认控制台串口的设备节点,没配置对的话,串口没有LOG输出。 建议通过串口调试工具直接拷贝log中的CMDLINE行参数,保存到parameter文件中在烧录,简单粗暴有效。
4、烧录boot.img。 在AndroidTool的Download Image页面,boot栏选择编译后的boot.img进行烧录。烧录前要确认好boot分区的Address,烧录后可以通过log确认kernel是否更新成功。
5、新编译的kernel已经在开发板上跑起来啦。可以自由修改内核了,增加驱动什么的都不是问题了。