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

    使用Busybox-1.2.0制作根文件系統

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

    使用Busybox-1.2.0制作根文件系統

    cross-3.3.2

    make-3.8.1

     

    STEP 1:

    創建根文件系統目錄,主要包括以下目錄/bin,/etc,/dev,/mnt,/sbin,/usr,/sbin,/tmp

    /proc,/lib. /usr下有bin, sbin, lib, local, etc   /mnt下有etc

    創建多級目錄可以使用mkdir –p usr/bin/ …….

     

    STEP 2:

    升級make到3.81版本,用RH9自己帶的make 3.79會出錯

    進入make-3.81目錄,執行:# ./configure    # make   #make install

    會把make安裝到/usr/local/bin目錄下,要使新make立即生效,要設置環境變量

    PATH=/usr/local/bin:$PATH。設置完成后,就可以編譯Busybox了。

     

    STEP 3:

    進入busybox-1.2.0目錄,執行# make defconfig

    執行# make menuconfig

     

    Busybox Setting -----> Build Options ----->

    選擇上 Build BusyBox as a static binary (no shared libs)

           Do you want to build BusyBox with a Cross Compiler?

    指定交叉編譯器為

    (/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compiler prefix

     

    Installation Options ----->

    選擇上 Don’t use /usr

    設置Busybox installation prefix為 ../rootfs即安裝目錄.

     

    在Shells中,選擇Choose your default shell為ash.

    保存退出

     

    STEP 4:

    # make    # make install

     

    安裝完后,就會把busybox拷到自己指定的rootfs 路徑下,同時會生成一個linuxrc文件,這個是busybox自帶的啟動文件,也可以自己編寫啟動文件

     

    Linux內核使用的是2.4.18

    用3.3.2交叉編譯器和1.2.0版本的busybox編譯通過

    我開始用1.9.2版本的,用2.95.3,3.4.1,3.3.2編譯均不通過

     

    STEP 5:   這個是用來啟動linux時輸入用戶和密碼的

    編譯tinylogin-1.4。進入tinylogin-1.4目錄,修改Makefile文件如下:

    DOSTATIC = true

    USE_SYSTEM_PWD_GRP = false

    USE_SYSTEM_SHADOW = false

    CROSS = /usr/local/arm/3.3.2/bin/arm-linux-

     

    STEP 6:

    執行# make PREFIX=../rootfs install      安裝到指定路徑

     

    STEP 7:

    進入根文件系統rootfs的etc目錄,執行如下操作:

    拷貝Busybox-1.2.0/examples/bootfloopy/etc/* 到當前目錄下。

    # cp –r ../../busybox-1.2.0/examples/bootfloopy/etc/* ./

    拷貝/etc/passwd, /etc/group, /etc/shadow到當前目錄下。

    # cp /etc/passwd ./

    # cp /etc/group ./

    # cp /etc/shadow ./

     

    修改inittab,把第二項改為::respawn:-/bin/login

    修改profile,加入PATH環境變量:export PATH=/bin:/sbin:/usr/bin:/usr/sbin

    設置鏈接庫:export LD_LIBRARY_PATH=/lib:/usr/lib

     

    對以下三個文件修改,只保存與root相關的項,根據具體情況內容會有所不同。

    修改passwd為root:x:0:0:root:/root:/bin/sh,即只保存與root相關項,而且最后改成/bin/sh。

    修改group為root:x:0:root

    修改shadow為root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::

     

    STEP 8:

    制作cramfs鏡像,下載到實驗箱上就可以引導起來了。

    # mkcramfs rootfs rootfs.cramfs

     

    這個是一個基本的移植過程,下面看一下busybox的啟動過程

    先進入vivi, 執行param show 會在最后一行看到:

    Linux command line: noinitrd root=/dev/mtdblock/1 init=/linuxrc console=ttyS0

    這個是vivi傳給linux的命令行參數,root=表示root根文件系統掛在哪個設備下,這里是mtd分區的,如果是bon分區的,就會是root=/dev/bon/2  init=/linuxrc這個最重要,表示初始化啟動腳本為根目錄下的linuxrc,console=ttyS0 初始化控制臺為串口

     

    BusyBox的intit命令提供了類似傳統init程序的系統啟動和初始化功能,init程序(如/sbin/init)只是一個指向busybox程序(/bin/busybox)的符號鏈接,也就是說,busybox是系統第一個執行的應用程序。Busybox由文件名識別出要執行的命令是init, 然后跳轉到init例程去運行

     

    Busybox init 依次執行如下任務:

    設置init的信號處理函數

    初始化控制臺

    分析/etc/inittab配置文件

    執行系統初始化腳本,如/etc/init.d/rcS

     

    完成初始化控制臺后,busybox檢查/etc/inittab文件是否存在,如果不存在,將使用一個缺省的inittab,我可可以自己寫一個inittab文件,格式如下:

    id:runlevel:action:process

    id指定要啟動的進程   runlevel是運行級別,busybox不支持運行級別,所以為空

    action是要執行的動作,process指定要運行的程序和啟動的命令行參數

     

    Action:

    sysinit   指定初始化腳本路徑

    respawn  當某進程結束時重啟該程序

    askfirst  在啟動程序前提示用戶按回車鍵

    wait  等待所啟動的進程結束

    once  只運行進程一次,不等待進程結束

    crtlaltdel 按組合鍵時執行的進程

    shotdown 系統關閉時運行的進程

    restart 重啟時運行的進程,通常是init本身

     

    自己寫的inittab

    ::sysinit:/etc/init.d/rcs

    ::respawn:-/bin/sh

    tty2:askfirst:-/bin/sh

    ::ctrlaltdel:/bin/umount –a –r

    第一句指定執行初始化腳本為 /etc/init.d/rcS

    第二句就是當進程退出,如執行exit后,又重新出現命令提示符

          如果要用帳號密碼登陸,則改成-/bin/login

    第三句是在啟動linux后,提示要按回車才能進入

    第四句是在按組合鍵后,執行umount,把所有文件系統umount

     

    再看/etc/init.d/rcS

    #!/bin/sh          //指定shell

    /bin/mount –a        //mount –a 為掛載全部文件系統,詳見/etc/fstab

    exec /usr/etc/.rc.local   //執行rc.local

     

    rcS只完成掛載全部文件系統,然后執行rc.local,進入/usr/etc,看rc.local

    #!/bin/sh

    ifconfig eth0 192.168.220.10   //設置板子IP

    echo “Set IP = 192.168.220.10”

     

    mount –t nfs –o nolock ……………..  //掛載NFS

    echo “mount nfs ok”

    也可以寫一些其他的掛載命令

     

    到這里就完成了啟動過程,有時也可以在/etc下寫一個profile,這個是由shell執行的,啟動后,按完回車才執行,這里也可以寫一些初化腳本,如初始化環境變量

     

    總結:linuxrc -> /sbin/init -> /etc/inittab -> /etc/init.d/rcS -> /usr/etc/rc.local   /etc/profile

     

    也可以編寫自己的linuxrc

    #!/bin/sh

    /bin/mount –n –t ramfs ramfs /etc

    /bin/cp –a /mnt/etc/* /etc

     

    /bin/mount –f –ramfs ramfs /tmp

     

    exec /sbin/init

     

    主要就是最后一句,執行init

    把/etc中的文件放到/mnt/etc/下,掛載/etc/為ramfs,然后把/mnt/etc/下的所有文件拷到/etc下,這時/etc下就為可寫的了,這樣可以方便修改腳本

     

    最好也將/tmp掛為ramfs,因為執行QT程序時,需要tmp目錄為可寫

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