第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字节头部信息对应,这是为什么呢?
更多嵌入式学习笔记、实战项目,点击这里即可免费领取