[Busybox]Busybox制作文件系統


 問題:

1.目前busybox和bootstrap兩種方案制作文件系統,哪種開發周期更短,更加簡單

2.如果需要在文件系統中添加某個package,要怎么做,如vim/udhcpd等

轉自http://blog.csdn.net/happy_stars_2016/article/details/52620577

定制根文件系統的方法很多,最常用的是使用BusyBox來構建。它能使用戶迅速方便地建立一套相對完整、功能豐富的文件系統,其中包括大量常用的應用程序。它集成壓縮了Linux的許多工具和命令。下面詳細介紹有關BusyBox定制根文件系統。

 

一、系統環境:

1、操作系統:Ubuntu12.04

2、交叉編譯工具:arm-linux-gcc4.4.3

3、busybox源碼包:busybox-1.25.0.tar.bz2

 

二、制作rootfs

  • 建立rootfs目錄

本人在/home/zxx下建立rootfs目錄

#mkdir rootfs
#cd rootfs
#mkdir root home bin sbin etc dev usr lib tmp mnt sys proc  //建立常用目錄
#mkdir usr/lib usr/bin
#pwd
/home/zxx/rootfs

 

 

  • 解壓源碼包:

 #tar -jxvf busybox-1.25.0.tar.bz2 

  • 修改Makefile配置

進入busybox-1.25.0目錄,修改Makefile文件如下:

ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/4.4.3/bin/arm-linux- (與你自己主機的arm-linux-gcc安裝目錄一樣)

 

  • 編譯BusyBox

  #make menuconfig 

選擇Busybox Settings--->Build Options--->,選擇[*] Build Busybox as a static binary(no shared libs)

 

選擇Busybox Settings ---> Installation Options --->BusyBox installation prefix(在里面輸入BusyBox的安裝目錄,我是保存在/home/zxx/rootfs下)

 

 

Shells --->Choose your default shell (ash) --->  --- ash

保存並退出

  • 編譯安裝
#make
#make install

 

  • 把busybox源碼目錄下的etc的內容拷貝到rootfs目錄下的etc下
# cd /home/zxx/rootfs/etc
# cp -a /home/zxx/Downloads/busybox-1.25.0/examples/bootfloppy/etc/* ./

 

  • 從本機拷貝passwd、shadow、group文件
# cp /etc/passwd .
# cp /etc/shadow .
# cp /etc/group .

 

修改passwd文件,把第一行和最后一行的bash修改成ash。

  • 修改初始化文件inittab和fstab

# vim inittab

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init 

tty2::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a

# vim fstab

proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0

 

  • rootfs下lib的制作

將交叉編譯環境下lib庫拷貝到/rootfs/lib

#cd /home/zxx/rootfs/lib
#cp /usr/local/arm/4.4.3/arm-none-linux-gnueabi/sys-root/lib./

 

三、編譯錯誤解決參考

  • make出現如下錯誤
miscutils/nandwrite.c: In function 'nandwrite_main':
miscutils/nandwrite.c:151: error: 'MTD_FILE_MODE_RAW' undeclared (first use in this?function)
miscutils/nandwrite.c:151: error: (Each undeclared identifier is reported only once
miscutils/nandwrite.c:151: error: for each function it appears in.)
scripts/Makefile.build:197: recipe for target 'miscutils/nandwrite.o' failed
make[1]: *** [miscutils/nandwrite.o] Error 1
Makefile:742: recipe for target 'miscutils' failed
make: *** [miscutils] Error 2

 

解決辦法

MTD_FILE_MODE_RAW在/usr/include/mtd/mtd-abi.h中定義。將/usr/include/mtd/mtd-abi.h拷貝到busybox的include文件中。

 #gedit miscutils/nandwrite.c  

修改頭文件如下:

#include "libbb.h"
#include "mtd-abi.h"
#include <mtd/mtd-user.h>

 

編譯可以通過。

  • 繼續make,出現如下錯誤
util-linux/blkdiscard.c: In function 'blkdiscard_main':
util-linux/blkdiscard.c:72: error: 'BLKSECDISCARD' undeclared (first use in this function)
util-linux/blkdiscard.c:72: error: (Each undeclared identifier is reported only once
util-linux/blkdiscard.c:72: error: for each function it appears in.)
scripts/Makefile.build:197: recipe for target 'util-linux/blkdiscard.o' failed
make[1]: *** [util-linux/blkdiscard.o] Error 1
Makefile:742: recipe for target 'util-linux' failed
make: *** [util-linux] Error 2

 

解決辦法

BLKSECDISCARD在/usr/include/linux/fs.h中定義,方法如上所述,將/usr/include/linux/fs.h拷貝到busybox的include文件中linux下。

#gedit util-linux/blkdiscard.c

 

修改內容如下:

#include <linux/fs.h>

 

編譯通過。

 

到這里rootfs基本上已經制作出來,有些內容需要的,可根據自己rootfs的需要進行自己增加。最后將rootfs目錄制作成鏡像后,就可以燒寫到開發板上了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM