本文共 2268 字,大约阅读时间需要 7 分钟。
一、环境、源码包准备:
OS:Linux x86_64
Compiler:arm-linux-gnueabihf-gcc
Compiler Target: 32-bit
Source: busybox1.30.1
编译命令:make ARCH=arm menuconfig,配置交叉编译所需的lib路径,如下:
编译完成后,生成的二进制可执行文件在 _install 目录下,仅包含文件系统基本的命令,构建根文件系统还需要添加很多必要的配置文件(如:/etc/inittab、/etc/fstab等),这些文件依据当前板卡的需求进行生成,一般芯片厂商会提供SDK,带有根文件系统,如果实在没有,建议从现有x86或者ARM板卡上拷贝一份,以此为依据进行修改和调整。
二、制作rootfs镜像
根文件系统目录构建完成后,需要新建ext4空白镜像,命令:
必须在32Bit的linux下,命令:
i、dd if=/dev/zero of=tmp.img bs=一次复制的字节数 count=复制的次数
ii、mkfs.ext4 tmp.img
iii、mount tmp.img /mnt/ -o loop (其中-o loop在某些系统下会出现)
iv、cp ./* /mnt (将根文件系统所有文件夹及文件拷贝到镜像中)
v、umount /mnt (至此,ext4格式的文件系统制作完成,合并镜像时不需要gzip压缩)
三、合并镜像
此处以UBoot推荐的FIT镜像为示例:
命令: ./mkimage -f image_make.its tmp.img
命令参数:mkimage:UBoot编译后生成的工具软件
-f :从文件读取镜像配置信息
image_make.its:制作FIT镜像的描述文件
tmp.img:最终生成的二进制镜像文件名(拓展名是自定义的,依需修改)
其中依赖的 image_make.its文件内容可参考下方:
/dts-v1/;/ { description = "ARM Board Base System Images"; #address-cells = <1>; /* 当前镜像中二进制文件列表 */ images { /* ARM内核32Bit处理器,型号:LS1021A */ Kernel-Linux { description = "ARM32 Linux Kernel"; data = /incbin/("zImage"); type = "kernel"; arch = "arm"; os = "linux"; compression = "none"; load = <0x41000000>; entry = <0x41000000>; }; /* ARM处理器设备树文件 */ FDT-Linux { description = "ARM Device Tree"; data = /incbin/("Demo.dtb"); type = "flat_dt"; arch = "arm"; compression = "none"; }; /* ARM处理器的文件系统 */ Rootfs-Linux { description = "ARM Board Ramdisk"; data = /incbin/("ramdisk.gz"); type = "ramdisk"; arch = "arm"; os = "linux"; compression = "gzip"; }; }; /* 当前镜像中启动配置的镜像信息 */ configurations { default = "Demo"; Demo { description = "ARM-Board Base System Images"; kernel = "Kernel-Linux"; fdt = "FDT-Linux"; ramdisk = "Rootfs-Linux"; }; };};
四、在UBoot下调试FIT镜像
4.1、UBoot引导FIT镜像命令:
setenv FIT_ADDR=0x10000000
bootm $FIT_ADDR
4.2、UBoot查看FIT镜像信息:
setenv FIT_ADDR=0x10000000
imls $FIT_ADDR
4.3、非FIT镜像UBoot下启动命令配置
bootm $load_addr $ramdisk_addr $ftd_addr)
或者
bootcmd=cp.b $kernel_addr $load_addr $kernel_size;bootm $load_addr $ramdisk_addr $ftd_addr;
4.4、UBoot中的shell功能
在UBoot下输入 \ 即可进入shell命令行模式,和linux的ssh终端类似,UBoot也实现了bash的功能,可以解释shell脚本。
以上,有问题欢迎指正,谢谢。
转载地址:https://blog.csdn.net/AMDDMA/article/details/99354045 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!