嵌入式学习笔记(10)mkv210_image.c代码详解

第1步:检验用户传参是不是3个。

第2步:分配16KB buffer并且填充为0.

第3步:打开源bin(led.bin),判断bin长度是否不大于16KB-16Bytes

第4步:以16个字符串填充0~15这16个Bytes

第5步:将源bin从第17个Bytes开始填充,直到整个内容为16KB

第6步:从17个Bytes开始以字节为单位统计校验和

第7步:将校验和保存到16个字节的8~12个字节中

第8步:以二进制写的方式创建一个新的二进制文件(210.bin)

第9步:将上方创建的16KB整个内容完全填充到新bin(210.bin)中

main函数两个形参的作用:

main函数接收2个形参:argc和argv。

argc是用户(通过命令行来)执行这个程序时,实际传递的参数个数。注意这个个数是包含程序执行本身的

argv是一个字符串数组,这个数组中存储的字符串就是一个个的传参。

譬如我们执行程序时使用./mkx210 led.bin 210.bin

则argc = 3

则argv[0] = "./mkx210"  argv[1] = led.bin  argv[2] = 210.bin

glibc读写文件接口:

linux中要读取一个文件,可以使用fopen打开文件,fread读取文件,读完之后fclose关闭文件。要写文件用fwrite来写。这些函数是glibc的库函数,在linux中用man 3 可以查找。如果你本身就知道这些函数的用法,只是记不起来可以man查找;如果你本身根本就不会用这些接口,建议先去baidu。

mkv210_image.c的疑问:

S5PV210启动时会从外扩存储器(nand /sd/usb)中拷贝16K代码到iRAM(0xd002_0000,其中0xd002_0010之前的16个字节储存的BL1的校验信息和BL1尺寸)中执行。其中用户手册中注明16字节头部信息排列格式如下:

0x0地址:BL1 size            

0x4地址:必须设置为0 (是规定)

0x8地址:CheckSum           

0xc地址:必须设置为0 (是规定)

但是,uboot中给出的参考代码中,首先将该16字节填充为"S5PC110 HEADER  ",然后替换0x8地址的内容,并没有和用户手册给出的16字节头部信息对应,这是为什么呢?

   更多嵌入式学习笔记、实战项目,点击这里即可免费领取

猜你喜欢

转载自blog.csdn.net/m0_70888041/article/details/132646045
今日推荐