• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 操作系統(tǒng) > Linux教程 > 動態(tài)編譯busybox和編譯并安裝busybox

    動態(tài)編譯busybox和編譯并安裝busybox

    時間: 若木635 分享

    動態(tài)編譯busybox和編譯并安裝busybox

      動態(tài)編譯busybox

      進入Build Options時,不要選擇Build Busybox as a static binary,其他所有操作步驟跟靜態(tài)編譯一樣,你會發(fā)現(xiàn)這樣建立的文件系統(tǒng)無法啟動,終端上打印出如下消息:

      Kernel panic-not synving:No init found. Try passing init=option to kernel.

      為什么會出現(xiàn)這種問題呢?這就得回到兩種編譯方式的特點上來。靜態(tài)編譯時是將所用到的庫文件一起編譯了進去,而動態(tài)編譯時是在需要時才調用相應的庫。我們選擇動態(tài)編譯后,沒有添加任何庫文件就運行,顯然是會出錯的。那么如何查看busybox可執(zhí)行文件里使用的庫呢。ldd和Readelf都可以顯示。

      ldd

      下面是查看cat的庫的結果,linux-gate.so.1是與內核通信的,不用管。所有程序其實都是通過ld-linux.so.2來找?guī)煳募模褪且粋€中介,必不可少。

      #ldd /bin/cat

      linux-gate.so.1 => (0x00bfe000)

      libc.so.6 => /lib/libc.so.6 (0x00a4a000)

      /lib/ld-linux.so.2 (0x00a28000)

      readelf

      下面是編譯的ARM上的系統(tǒng)的庫文件查找。

      # arm-uclibc-linux-readelf -d busybox

      Dynamic section at offset 0xca014 contains 18 entries:

      標記 類型 名稱/值

      0x00000001 (NEEDED) 共享庫:[libm.so.0]

      0x00000001 (NEEDED) 共享庫:[libc.so.0]

      0x0000000c (INIT) 0xbe24

      0x0000000d (FINI) 0xb2054

      0x00000004 (HASH) 0x80e8

      0x00000005 (STRTAB) 0xa500

      0x00000006 (SYMTAB) 0x8b70

      0x0000000a (STRSZ) 3259 (bytes)

      0x0000000b (SYMENT) 16 (bytes)

      0x00000015 (DEBUG) 0x0

      0x00000003 (PLTGOT) 0xda0cc

      0x00000002 (PLTRELSZ) 3040 (bytes)

      0x00000014 (PLTREL) REL

      0x00000017 (JMPREL) 0xb244

      0x00000011 (REL) 0xb1bc

      0x00000012 (RELSZ) 136 (bytes)

      0x00000013 (RELENT) 8 (bytes)

      0x00000000 (NULL) 0x0

      從上面的結果中,我們可以看到,busybox這個程序使用到了libm.so.0和libc.so.0兩個庫文件,實際上這是2個符號鏈接,分別指向libc-0.9.28.so和libuClibc-0.9.28.so。

      將以上四個文件分別拷貝到lib目錄下。按理說,這樣應該就可以了,但是仍然無法正常運行。顯示的錯誤信息和剛剛沒加庫之前一樣。可能的原因有2種:一是庫文件沒有添加全,二是庫文件沒有正確被加載。

      根據(jù)readelf顯示的結果應該不是第一種原因。那么到底為什么沒被正確加載呢?原來庫文件的加載,還需要一個共享庫加載器。找到對應的文件ld-uClibc-0.9.28.so和ld-uClibc.so.0添加到lib目錄下后。運行正常。

      編譯并安裝busybox

      #make

      #make install

      用 make 命令編譯busybox軟件。

      用 make CONFIG_PREFIX=<安裝目錄> install 命令安裝。

      如果在命令行中省略CONFIG_PREFIX變量的賦值,則會安裝缺省值 ./_install 目錄下。CONFIG_PREFIX可以在make menuconfig的配置界面中修改。

      編譯好后在busybox目錄下生成子目錄_install,里面的內容:

      drwxr-xr-x 2 root root 4096 11月 24 15:28 bin

      rwxrwxrwx 1 root root 11 11月 24 15:28 linuxrc -> bin/busybox

      drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin

      Ø bin包含用戶工具,其中,busybox可執(zhí)行文件就在這個目錄下,該目錄下其他所有文件都是指向busybox的符號鏈接

      Ø sbin目錄包含操作系統(tǒng)工具,同樣也指向busybox。

      Ø linuxrc是一個鏈接文件,指向busybox。

      將文件復制到你的鏡像根文件夾中。

    75372 主站蜘蛛池模板: 男人插女人视频软件| 日本色图在线观看| 欧美大屁股xxxx| 同学的嫩苞13p| 3571色影院| 师尊要被cao坏了by谦野| 亚洲免费网站观看视频| 精品国产福利久久久| 国产日本在线视频| gay肌肉猛男gay激情狂兵| 日韩欧美一区二区三区免费看| 人妻无码一区二区三区免费| 车文里的冰块棉签是干啥用的| 国产综合免费视频| 一级特黄aaa大片大全| 日韩午夜激情视频| 亚洲欧美一区二区三区日产| 精品无码国产自产拍在线观看 | 男女抽搐动态图| 国产偷国产偷精品高清尤物| 91免费看国产| 奶大灬舒服灬太大了一进一出 | 69无人区卡一卡二卡| 客厅餐桌椅子上波多野结衣| 久久综合九色综合网站| 欧美激情一区二区三区视频| 唐人电影社欧美一区二区| 57pao一国产成视频永久免费| 成年人午夜影院| 久久综合噜噜激激的五月天| 欧美激情视频一区二区| 免费大片av手机看片| 色135综合网| 国产真实乱子伦精品视手机观看| imim5.vip| 成年人看的毛片| 久久精品国产99久久久| 欧美三级黄视频| 亚洲精品无码久久久久AV麻豆| 精品人体无码一区二区三区| 国产乱妇乱子视频在播放|