飞凌的OK6410使用的是三星提供的U-Boot,他们的烧写使用了自己的 SD卡烧写工具:SD_Writer,首先烧写了一个mmc.bin和一个zImage-sd的文件到SD卡中,前者mmc.bin其实就是用于SD卡启动的,后者zImage-sd是一个内核文件。我们首先来看看mmc.bin做了哪些事情,从SD卡启动,进入U-Boot的下载模式,使用printenv打印环境变量,可得:
- SMDK6410 # printenv
- bootargs=rootdelay=0 console=ttySAC0,115200
- bootcmd=nand erase;
- fatload mmc 0:1 0x50008000 u-boot.bin;nand write.uboot 0x50008000 0 0x100000;
- fatload mmc 0:1 0x50008000 zImage;nand write.e 0x50008000 0x100000 0x500000;
- movi read kernel 0x50008000;bootm 0x50008000
1、擦除整个NAND Flash;
2、从SD卡中将u-boot.bin文件下载到内存中,然后烧写到NAND Flash上;
3、从SD卡中将zImage下载到内存中,然后烧写到NAND Flash上;
4、从SD卡读取内核(不是上一步烧写的zImage,而是之前使用SD卡烧写工具烧写的zImage-sd)到内存,然后启动这个内核。而启动参数就是上面的bootargs所显示。
从这是我们能看到其实这个mmc.bin很像uboot,其实这个mmc.bin就是一个uboot,只不过经过特殊的处理。
这个mmc.bin做了两件事情,擦除nand,把我们复制的uboot,bin zImage写到nand的固定位置。另一件事情就是启动一个linux,这个linux是从sd卡启动的。
进入这个内核之后,就会进入下面这个命令行,
可能有人会觉得之前烧写了U-Boot和zImage-sd到SD卡上,并没有烧写文件系统,那这个内核怎么启动呢?这里我们看一下命令提示符前面“initramfs”这几个字符就明白了。
所有的2.6版本linux内核都有一个特殊的文件系统rootfs,是内核启动的初始始根文件系统,initramfs的文件会复制到rootfs。如 果把initramfs比作种子,那么rootfs就是它生长的土壤。大部分linux系统正常运行后都会安装另外的文件系统,然后忽略rootfs。
为什么要输入./yjsx呢?其实这个只是一个脚本,我们可以ls看一下这个根目录有什么,我们会看到这个文件,用vi打开看一下,里面就几行命令,挂sd卡,挂载nand分区,然后解压文件到nand分区,这样就烧写好了系统。
这种烧写方式是一种很巧妙的方式,利用linux的tar命令,然后解压到相应的分区,我想这种方法也就飞凌的工程师能想出来。
隆扬原创作品转载请注明出处
http://blog.csdn.net/cediy2088long