<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    關于 mkimage

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    在嵌入式系統中,Linux內核和根文件系統一般都與bootloader一起燒寫在flash芯片中,系統啟動后,bootloader將Linux內核壓縮到RAM中,并把壓縮的根文件系統復制到RAM中,然后啟動內核,由內核解壓縮根文件系統,并調用文件系統中的應用程序和腳本文件啟動系統。

    在燒寫Linux內核和根文件系統之前應該對它們進行適當處理,在它們的頭部加入一些提供給bootloader的信息字符,以便bootloader能夠辨認它們并獲取它們的信息,從而正確地將它們解壓縮、復制到RAM中的正確位置,并正確啟動內核。這個為Linux內核和根文件系統添加頭部的工作一般由編譯bootloader時生成的一個小應用程序來完成,比如u-boot編譯后會在其tools子目錄下生成一個叫mkimage的應用程序,而cfe在編譯后也會在其cfe/hosttools子目錄下生成一個叫mkflashimage的應用程序,它們就是完成上述功能的工具程序,此處我們只介紹u-boot的mkimage。

    mkimage命令格式如下:

    # mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image

    其中各字段含義如下:

     

        

        

    -x

    指定內核就在Flash中運行,即XIPexecute in place

    -T

    指定輸入文件的類型,如“kernel”、“filesystem”、“firmware”、“ramdisk

    -A

    指定處理器體系架構

    -O

    指定操作系統類型名字,如“linux”、“vxworks”、“psos”等

    -C

    指定壓縮模式,可能設置為“none”、“bzip2”、“gzip

    -a

    指定程序被解壓縮或復制到RAM中的地址

    -e

    指定程序(內核)的入口地址

    -n

    指定image文件的名字

    -d

    指定輸入的程序文件,可是有多個文件,如內核或/和根文件系統二進制文件

    image

    輸出文件名

    mkimage命令舉例如下:

    #mkimage -n "My Kernel" -A arm -O linux -T kernel -C gzip –a 0x8000 –e 0x8000 -d kernel.gz kernel.img

    以上命令將壓縮了的內核二進制文件kernel.gz轉換成u-boot能夠辨認的二進制文件kernel.img,并指定kernel.img的名字為“My Kernel”,處理器體系架構為arm,操作系統類型為linux,程序類型為操作系統內核,程序由gzip壓縮,程序的鏈接起始地址為0x8000,程序的入口地址為0x8000,注意這兩個地址一定要是物理地址而不是對應的虛擬地址。

    #mkimage -n "My Rootfs" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

    以上命令將壓縮了的ramdisk根文件系統二進制文件ramdisk.gz轉換成u-boot能夠辨認的二進制文件ramdisk.img,并指定ramdisk.img的名字為“My Rootfs”,處理器體系架構為arm,操作系統類型為linux,程序類型為ramdisk,程序由gzip壓縮,不需要指定ramdisk的鏈接起始地址和入口地址。

    如果我們將kernel.img和ramdisk.img文件分別寫到flash芯片的0xFF000000和0xFF200000位置,系統啟動后進入u-boot命令行界面,執行以下u-boot命令:

    # bootm 0xFF000000 0xFF200000

    那么u-boot將把0xFF000000位置的Linux內核解壓縮到RAM中的0x8000位置,再將0xFF200000位置的ramdisk文件系統映像文件刨掉u-boot頭部后復制到RAM中的某個位置,然后跳轉到內核的入口地址0x8000位置啟動內核,同時把板子信息、ramdisk在RAM中的起始地址和結束地址、命令行字符串傳給內核,這樣Linux開始啟動運行。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全