背景是这样的,公司做嵌入式Linux,其中kernel,uboot已经移植完毕,文件系统也已经做好,且使用的是ubifs,ubifs相关介绍这里 应用程序也已经开发完毕,并且放到文件系统中已经做成了镜像(ubi.img),我接手该项目的时候,手里只有应用程序的源码,没有文件系统的源码,目前的需求是修改应用程序的部分代码,然后要烧录到arm中。
网上搜集了一下,大概有3种思路:
- 通过uboot的tftp命令,走网线把应用程序下载到arm中(较难),最关键的目前我的uboot还没调通,串口不输出任何uboot的信息,我不确定是不是在uboot那边关掉了调试功能,这个后续再解决。
- 通过nfs挂载,走网线,可以实时的更新文件系统到arm,适用于在线调试。
- 先挂载文件系统,把改完的应用程序放到文件系统中,再重新制作文件系统镜像,最后将文件系统镜像通过SD卡烧录到arm即可。
上面2,3两种方式都涉及到ubi.img的挂载问题,网上搜集了一下,是这样说的:
“ubi image不能像其他格式的文件系统image那样作为loop设备直接mount起来,所以需要找其它方法,具体做法就是安装nandsim模块来模拟一个nand flash,然后将ubi image写到mtd设备上,再将mtd设备attach起来,最后就可以mount ubi设备了”
ubi镜像挂载
首先挂载ubi.img,解决方案如下:
需要准备安装的工具:
1 | sudo apt-get install mtd-utils |
然后具体步骤如下,可以写成shell脚本方便以后使用:
1 | #!/bin/bash |
反向制作ubi镜像
挂载完ubifs之后,我们可以把修改好的应用程序放到文件系统中,然后再把它制作成ubi镜像,用到两个命令是mkfs.ubifs和ubinize,这两个命令在mtd-utils中。
具体的步骤如下(其中分析页面大小等参数比较难,详见参考资料):
1 |
|
参考资料: