sd_fusing.sh将uboot烧写到SD卡
以前只知道使用“./sd_fusing.sh /dev/sdb”命令来烧写uboot.bin到SD卡中,对其中的细节并不了解。
心存忐忑,于是乎花了些功夫,去了解sd_fusing文件夹下的内容。
1、sd_fusing文件夹中有哪些文件?
如下图:
打开Makefile文件,可知mkbl1、sd_fdisk分别由C110-EVT1-mkbl1.c、 sd_fdisk.c文件编译得到。
2、sd_fusing.sh脚本的解释
(1)首先明白,烧录uboot.bin文件到sd卡,所使用的命令是“./sd_fusing.sh /dev/sdb”
- 由此可知$0=./sd_fusing.sh,$1=/dev/sdb,$#=1(参数的个数)
(2)其次,了解sd_fusing.sh的代码
- 首先了解下dd命令的用法:
- 对sd卡进行分区,执行文件是编译得到的sd_fdisk。后面将分析sd_fdisk.c这个文件。
- 然后烧写BL1和uboot到sd卡对应的位置
存疑:
1、sd_fdisk.c(编译得到sd_fdisk)这个文件是如何对sd卡进行分区的?
2、C110-EVT1-mkbl1.c(编译得到mkbl1)这个文件是如何将uboot的前8k复制到SD-bl1-8k.bin文件的?为什么是8k?8k中完成了什么任务?
- uboot的前8K代码肯定要完成重定位,因为BL1和BL2运行在不同的链接地址(举例如,BL1链接地址为0xd0020010,BL2链接地址为0x23e00000)。
- 这里见博文:http://blog.****.net/oqqhutu12345678/article/details/69365104中的七2的重定位。
3、如何将BL1、uboot烧写至sd卡对应的位置?为什么是1和49?
- 使用dd命令进行对块设备的烧写。
- BL1必须放在第1个 block开始的区域(三星规定的),而49可以变为其他合适的。