<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>
  • 網站首頁 > 物聯資訊 > 技術分享

    從ramdisk根文件系統啟動Linux成功

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

    這幾天參考國嵌的實驗手冊和網上的資料完成了u-boot定制、內核定制、ramdisk根文件系統的制作,并成功。趁熱打鐵,總結一下。本文引用了很多網絡上的文章,就不一一注明了。感謝各大俠的幫助,如有雷同,望見諒。

    開發環境:紅帽企業版5

    交叉編譯工具鏈:arm-linux-gcc4.3.2

    嵌入式Linux內核版本:友善之臂的mini2440開發板光盤自帶的內核linux-2.6.32.2

    開發板:mini2440-64MNand Flash

    Bootloader:u-boot-1.20

    具體步驟如下:

    1.U-BOOT定制

    因為內容較多,改天再總結一篇吧,在這先不多說

    2.解壓內核源碼樹

    具體步驟參照友善之臂mini2440開發板用戶手冊,具體不詳述了。

    3.修改內核配置選項

    make menuconfig,打開配置菜單,修改兩個配置項,分別是:

    a):General setup-->選擇 Initial RAM filesystem and RAM disk...... 項

    b):DeviceDrivers-->Block devices-->選擇 RAM block devicesupport 項

    修改(4920)Default RAM disk size kbytes選項為(8192)Default RAM disk size kbytes

    特別要注意的一點是,ramdisk是一種內存虛擬磁盤技術,實質上并不是一種文件系統,它使用的文件系統時ext2文件系統。所以一定要在make menuconfig的時候進入File systems菜單,選上<*>Second extended fs support。以提供內核對ext2文件系統的支持。

    然后保存配置退出。

    這樣就為內核添加好了ramdisk啟動功能和ramdisk的驅動支持了。
    4.修改內核啟動參數

    方法有二:

    a):修改.config的第310行,修改"CONFIG_CMDLINE"的定義

    修改為CONFIG_CMDLINE="initrd=0x32000000,0x200000root=/dev/ram rw console=ttySAC0 mem=64M" 保存。

    意思為從ramdisk啟動,ramdisk壓縮文件起始地址在內存地址0x32000000處,文件大小為0x200000。

    此參數也可以在makemenuconfig ARCH=arm時進入Boot options菜單,然后在Default kernel command string里修改。效果是一樣的。

    b):或者不修改.config的的第310行CMDLINE定義,而是用u-boot的bootargs環境變量來傳遞啟動參數。

    同樣也是修改該環境變量為bootargs=initrd=0x31000000,0x200000root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M

    并saveenv保存u-boot環境變量

    以上a),b)的效果是一樣的。(注:我只試了a,b未試)
    5.編譯內核

    注意:好像友善之臂把內核源碼目錄里的uImage目標給注釋了,直接makeuImage會提示沒有uImage的目標。zImage 是ARMLinux常用的一種壓縮映像文件,uImage是U-boot專用的映像文件,它是在zImage之前加上一個長度為0x40的“頭”,說明這個映像文 件的類型、加載位置、生成時間、大小等信息。換句話說,如果直接從uImage的0x40位置開始執行,zImage和uImage沒有任何區別。另外,Linux2.4內核不支持uImage,Linux2.6內核加入了很多對嵌入式系統的支持,但是uImage的生成也需要設置。

    在這里,我直接把u-boot根目錄下/tools中的mkimage工具拷貝到主機的/usr/bin目錄下,就可以直接在內核根目錄下執行

    #make uImageARCH=arm CROSS_COMPILE=arm-linux-

    等待一會,內核編譯完成。

    6.制作ramdisk根文件系統(實際上是建立根文件系統)

    該過程是制作ramdisk根文件系統的核心步驟,方法如下:

    a)創建根文件系統目錄:

    #cd轉入到你的工作目錄。

    #mkdir rootfs

    #cd rootfs

    #mkdir bin dev etclib proc sbin sys usr mnt tmp var

    #mkdir usr/binusr/lib usr/sbin lib/modules
    b)創建最基本的設備文件:

    #cd dev

    #mknod -m 666console c 5 1

    #mknod -m 666 nullc 1 3

    #cd ..
    c)安裝/etc配置文件:

    我是用的國嵌提供的etc配置文件,未作修改,直接解壓到根文件系統里。

    操作如下:

    #tar etc.tar.gz -C/xxx/rootwhj

    xxx表示你要制作的根目錄所在路徑。
    d)編譯內核模塊:

    進入Linux內核源碼根目錄

    #make modulesARCH=arm CROSS_COMPILE=arm-linux-
    e)安裝內核模塊:

    #makemodules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootwhj//嵌入式中的內核模塊都要在文件系統中

    xxx表示你要制作的rootfs所在的目錄。
    f)配置busybox

    進入busybox目錄執行#make menuconfig

    進入BusyboxSettings -> build Options ->選中"Build busyboxas a static binary“,即靜態鏈接,免去拷貝大量的庫文件。

    InstallationOptions -> 選中"Don't use /usr",以免busybox不慎被安裝到宿主機系統的相應目錄下,破壞宿主機系統。

    BusyboxInstallation Prefix (/xxx/rootwhj),修改該選項表明編譯后的busybox將安裝到該位置。
    g)編譯、安裝busybox

    #make ARCH=arm CROSS_COMPILE=arm-linux-

    幾分鐘編譯完成后

    #make install

    安裝到BusyboxInstallation Prefix (/xxx/rootwhj)設定的目錄里。當前為我要制作的根文件系統目錄(/xxx/rootwhj)。

    //完成根文件系統的創建

    h)制作ramdisk根文件系統鏡像

    方法如下:

    http://genext2fs.sourceforge.net/下載可以簡單方便的制作ramdisk文件系統的工具genext2fs,這樣就不用像網上大多數說的那樣繁瑣的制作ramdisk映像了,當前最新版本為genext2fs-1.4.1.tar.gz 。

    編譯生成該工具genext2fs,并將其放入宿主機的/sbin/目錄下以方便使用。

    跳轉到要制作的rootfs的上一級目錄

    #genext2fs -b 8192-d rootfs ramdisk

    -b是指制作的ramdisk大小為8MB

    -d是指要制作成ramdisk的根文件系統目錄

    最后的ramdisk是制作出來的ramdisk的名字,當然可以改名了。

    #gzip -9 -f ramdisk

    將該ramdisk以最優方式壓縮為ramdisk.gz

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