1 uImage和zImage
uImage和zImage都是Linux内核启动时可能使用到的镜像格式
1.1 uImage
uImage是一种包含压缩和非压缩内核镜像的格式,它能够根据实际情况选择合适的解压缩方式。它通常用于在嵌入式系统中,通过bootloader从存储介质中加载内核镜像。
uImage头部记录了内核镜像的压缩类型、校验和、入口点等信息,可以通过mkimage命令进行创建,例如:
mkimage -A arm -O linux -T kernel -C gzip -a 0x80008000 -e 0x80008000 -n "My Kernel" \-d kernel.bin uImage
其中,-A参数表示目标体系结构(architecture),-O参数表示操作系统(OS),-T参数表示类型(type),-C参数表示压缩方式,-a参数表示入口地址,-e参数表示执行地址,-n参数表示内核名称,-d参数表示内核镜像文件。
1.2 zImage
Image是一种只包含非压缩内核镜像的格式,它能够直接被硬件平台加载并执行。它通常用于在计算机系统中,由GRUB或者LILO等bootloader从存储介质中直接加载内核镜像。
zImage具有精简的代码结构,因此可以在较小的内存中运行。与uImage不同,zImage没有头部信息和额外信息,只是一个从0x100000开始的可直接执行的二进制文件。
在Linux内核的编译过程中,可以通过在.config
文件中设置CONFIG_KERNEL_GZIP、CONFIG_KERNEL_BZIP2等参数来决定使用何种压缩方式,并生成对应的内核镜像文件。
总之,uImage和zImage是两种不同的Linux内核镜像格式,分别用于嵌入式系统和计算机系统等不同场合。开发人员需要根据实际情况选择合适的镜像格式,并了解相关工具和命令的使用方法。
2 bootz和bootm
bootz和bootm都是Linux内核启动命令,用于从Flash或者SD卡等存储介质中加载并启动Linux内核
2.1 bootz
bootz命令用于从存储介质中加载uImage格式的压缩内核镜像,并通过zImage格式解压后执行。uImage是一个可以包含压缩和非压缩内核镜像的格式,它能够根据实际情况选择合适的解压缩方式。
使用bootz命令启动Linux内核需要先设置启动参数,例如:
setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait'
bootz ${kernel_addr_r} - ${fdt_addr_r}
其中,setenv命令用于设置启动参数,console设定调试信息输出到串口ttyS0,root指定文件系统所在的分区,rw设置为读写模式,rootwait在挂载根文件系统前等待根设备准备就绪。
然后,通过bootz命令将存储介质中的压缩内核镜像加载到内存,再通过zImage格式进行解压缩,最终启动Linux内核。
2.2 bootm
bootm命令用于从存储介质中直接加载非压缩的内核镜像,并执行。与bootz不同,bootm不需要解压缩操作,因此启动速度更快。
使用bootm命令启动Linux内核也需要设置启动参数,例如:
setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait'
bootm ${kernel_addr_r} - ${fdt_addr_r}
其中,setenv命令同样用于设置启动参数,后面的bootm命令则将存储介质中的非压缩内核镜像直接加载到内存,然后启动Linux内核。
总之,在Linux系统中,可以通过bootz或者bootm命令启动Linux内核。要根据实际情况选择合适的命令,并在启动前设置好相应的启动参数以确保系统正确启动。