bootm命令

    xiaoxiao2021-03-26  92

     制作Linux映像 ============ 使用uboot时,内核通常生成的文件"zImage"或"bzImage"是没用的。较新一些的内核原码会 生成"uImage", 这个可以为uboot使用。 "uImage"全用了一个工具"tools/mkimage"来封装压缩后的映像文件,在其头部添加一 些信息以及crc32校验等。 我们需要做如下几件事情: * 制作一个标准的内核映像文件"vmlinux"(这个是ELF格式的) * 将其转换为二进制映像         arm-linux-objcopy -O binarty \                 -R .note -R .comment \                 -S vmlinux linux.bin * 压缩这个二进制映像         gzip -9 linux.bin * 封装这个已压缩的映像         mkimage -A arm -O linux -T kernel -C gzip \                 -a 0 -e 0 -n "Linux Kernel Image" \                 -d linux.bin.gz uImage mkimage 也可以用来制作ramdisk映像。 mkimage 在映像的头部添加了64字节的信息,用来指明映像文件用于的体系结构,操作系统, 映像类型, 压缩方式,入口地址,时间戳,crc32校验等。 mkimage 一般用于两种情况: 为映像添加头信息 和 列出文件的头信息          tools/mkimage -l image              -l ==> 列出映像的头信息 添加头信息时     tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \               -n name -d data_file image       -A ==> set architecture to 'arch' 体系结构       -O ==> set operating system to 'os' 操作系统       -T ==> set image type to 'type' 映像类型       -C ==> set compression type 'comp' 压缩方式       -a ==> set load address to 'addr' (hex) 加载地址       -e ==> set entry point to 'ep' (hex) 入口地址       -n ==> set image name to 'name' 映像文件名       -d ==> use image data from 'datafile' 制作映像的时间 ---------------------------------------------- bootm ===== 这个命令用于启动一个操作系统映像。它会从映像文件的头部取得一些信息,这些信息包括: 映像文件的基于的cpu架构、其操作系统类型、映像的类型、压缩方式、映像文件在内存中的加载地址、 映像文件运行的入口地址、映像文件名等。 紧接着bootm将映像加载到指定的地址,如果需要的话,还会解压映像并传递必要有参数给内核,最后 跳到入口地址进入内核。 bootm的第一个参数是映像存储的地址。 例如Linux,可以附带一个参数。此参数会被认为是一个initrd的起始地址,此时bootm命令有三个 步骤:首先解压Linux内核映像并将其复制到ram中,然后将ramdisk映像加载到ram中,最后将控制 权交给内核,并向内核传递ramdisk的位置和大小等信息. 单单用来启动Linux内核,而没有initrd时,可用如下命令:  => bootm ${kernel_addr} 如果还有initrd,则可使用下面的命令:  => bootm ${kernel_addr} ${ramdisk_addr} 使用时确保地址参数正确。 当待启动的映像文件已经被加载于RAM时(例如用tftp下载到sdram上),需要对内存部局更加小心。 需要确保映像文件(可能是已被压缩的映像文件)加载的地址不会与解压后的内核位置重叠。例如,如果 将一个ramdisk映像加载于内存的低地址,则在Linux内核加载时可能会覆盖它。这将导致未知的系统 崩溃。
    转载请注明原文地址: https://ju.6miu.com/read-660425.html

    最新回复(0)