busybox制作根文件系统

一、环境、源码包准备:

       OS:Linux  x86_64

       Compiler:arm-linux-gnueabihf-gcc

       Compiler Target: 32-bit

       Source: busybox1.30.1

       编译命令:make ARCH=arm menuconfig,配置交叉编译所需的lib路径,如下:

busybox制作根文件系统_第1张图片

       编译完成后,生成的二进制可执行文件在 _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脚本。

 

以上,有问题欢迎指正,谢谢。

你可能感兴趣的:(嵌入式学习,Linux学习&开发)