通過busybox制作根文件系統


通過busybox制作根文件系統可以自定義選項,在制作的根文件系統中添加需要的命令,指定生成的根文件系統到相應的目錄下。

 

一.  根文件系統的獲取方式--->官網:

https://busybox.net/downloads/

二.  使用busybox制作根文件系統

第一步 生成基本命令

1.  解壓 【 tar -xvf busybox-1.30.0.tar.bz2 

2.  配置交叉編譯工具  打開busybox的頂層目錄

(1)  Vi  Makefile

(2)  修改內容: (不修改內容編譯時就要指定這兩個變量的值,如 make ARCH=arm CROSS_COMPILE=arm-linux-)

164行 CROSS_COMPILE ?=  改為:CROSS_COMPILE ?= arm-linux-

190行 ARCH ?= $(SUBARCH) 改為:ARCH ?= arm

表示修改交叉工具鏈為arm-linux-  架構支持arm架構

3.  默認配置:導出配置文件【 make defconfig 

或者指定輸出目錄 make defconfig O=../output 指定的輸出目錄output需要自己事先創建

4.  自定義選項配置 圖形化配置界面 啟動命令:【 make menuconfig 】

(1)添加 insmod rmmod modinfo等命令,在配置界面中找到“Linux Module Utilities”然后選中相應的命令

             

  (2) 配置工具生成到指定的目錄

  Busybox  Setting -------->

    Installation Options ("make install" behavior)  --->  

      (./_install) BusyBox installation prefix  

5. 編譯

   $ make  或者  make all -j4  V=1       PC機下linux中多核編譯

     $ make  install    

6. 清除編譯過程的文件及配置

  【make clean 】         清除 .o  .bin 文件

  【make mrproper】    清除  .o  .bin  配置文件

  【make distclean】     清除  .o  .bin  配置文件

 

 

第二步 構建基礎文件和目錄 -- 根文件系統制作

 

  1. 通過 make install 命令把生成的根文件創建在頂層目錄 _install下,如果是通過 make defconfig O=../output 導出配置的,則在相應的output目錄下進入_install目錄

  

        2. _install目錄下創建根文件系統所需要的目錄:  _install $ mkdir  dev  etc  home  lib   mnt  proc  root   sys  tmp   var -p

   3. 在創建的根文件系統的 etc目錄下創建inittab文件:_install $ touch etc/inittab 

#this is run first except when booting in single-user mode.
::sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
::respawn:-/bin/sh
# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a

  4. 繼續創建目錄及文件如下:

  (1) _install $ mkdir etc/init.d/ -p

  (2) _install $ touch etc/init.d/rcS

  (3) _install $ gedit etc/init.d/rcS  在此文件內添加內容如下

#!/bin/sh
#This is the first script called by init process
/bin/mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s

 

   5.  _install $ touch etc/fstab 

    _install $ gedit etc/fstab  文件中添加內容如下:

#device     mount-point     type         options       dump     fsck order
proc        /proc           proc         defaults        0        0
tmpfs       /tmp            tmpfs       defaults        0        0
sysfs       /sys            sysfs        defaults        0        0
tmpfs       /dev            tmpfs        defaults        0        0

 

  6.  _install $ touch etc/profile 

    _install $ gedit etc/profile  文件中添加內容如下:

#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
export PS1="[$USER@$HOSTNAME \W]\# "
#export PS1="[\[\033[01;32m\]$USER@\[\033[00m\]\[\033[01;34m\]$HOSTNAME\[\033[00m\ \W]\$ "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH

  7. 添加動態庫支持    // 查看命令在哪個目錄下面 which arm-none-linux-gnueabi-gcc  

  (1) 查看命令依賴的庫文件 :arm-none-linux-gnueabi-readelf -d /bin/ls

  (2) _install $ cp /opt/gcc-4.9.4/arm-none-linux-gnueabi/sysroot/lib/* lib -ra   表示把相應目錄下的所有文件拷貝到制作的根文件系統的 lib目錄下

 

  (3) 為了減少體積刪除靜態庫  _install/lib $ rm  lib/*.a

  (4) 剝離動態庫的調試信息,符號表等等 du -h 查看文件大小;瘦身_install/lib $ arm-linux-strip *    注意操作的目錄;如果沒有權限把所有的文件權限修改 chmod  777 *

 

然后把制作的根文件系統目錄壓縮即可,並修改權限

 

 

 

 

 

8.  通過 eMMC 掛載根文件系統

首先(使用SD卡啟動uboot)通過網絡掛載根文件系統,通過tftp服務把ubootlinux內核鏡像分別下載到內存0x41000000地址處然后通過mmc命令把ubootlinux內核鏡像燒寫到eMMC中,把剩余的部分分區設置為根文件系統使用。

 

Uboot下操作:基於s5p6818 移植

uboot命令行下把tftp 0x41000000 win-uboot.bin  ----> mmc dev 2----> mmc write 0x41000000  0  0x300 0x41000000地址處寫入eMMc中從第0塊開始寫,寫入0x300塊;接着在把內核鏡像燒寫到eMMC中,步驟如上,只是下載和燒寫的是uImage。(dev 2表示切換到emmc下,dev 0 表示切換到SD下)

啟動系統后操作:

(1)先進入系統后使用分區命令: fdisk /dev/mmcblk0 表示把emmc分區   

    

2)格式化分區:mkfs.ext2 /dev/mmcblk0p1    # 格式化分區為ext2類型文件系統

3)目標板掛載文件系統到 /mnt mount  -t ext2 /dev/mmcblk0p1  /mnt

4)把制作的根文件系統拷到nfs目錄下,然后在目標板上把制作的根文件系統壓縮包拷貝到掛載點處

5)解除掛載:umount  /mnt

6)設置ubootbootargs啟動參數

set bootargs root=/dev/mmcblk0p1  rw  rootfstype=ext2  init=/linuxrc console=ttySAC0,115200 ip=192.168.3.132 # 最后的ip為宿主機ip

7)設置啟動地址:

set bootcmd "mmc dev 2;mmc read 0x41000000 500 3000; bootm 0x41000000"

8)啟動開發板 掛載成功

 

 

 ****************************************************************************************************************************

*****************************************************************************************************************************

*****************************************************************************************************************************

ramdisk 制作cramfs  (只讀文件系統)

1. 按照給的 Makefile 文件制作 ramdisk.img

2. 修改內核配置  make menuconfig

  Device Drivers  --->

   [*] Block devices  --->

  <*>   RAM block device support

  (16)    Default number of RAM disks

  (51200) Default RAM disk size (kbytes)

 

$ make uImage

$ cp arch/arm/boot/uImage ~/tftpboot

 

3. FS6818# set bootcmd "tftp 0x41000000 uImage;tftp 0x42000000 ramdisk.img; bootm 0x41000000 0x42000000"

   FS6818# set bootargs "root=/dev/ram rw initrd=0x42000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200"

 

通過 fatload 獲取 uImage ramdisk.img

1. uboot 也支持文件系統   可以識別 vfat 文件系統

2. FS6818# set bootargs "root=/dev/ram rw initrd=0x42000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200"

 FS6818# set bootcmd "fatload mmc 0 0x41000000 uImage;fatload mmc 0 0x42000000 ramdisk.img; bootm 41000000 42000000"

 

1. 啟動linux內核  進入命令行(正常掛載根文件系統)

2. fdisk /dev/mmcblk1  分區命令

3. Command (m for help): n

4. Partition number (1-4): 1

5. First cylinder (1-241152, default 1): 600

6. Last cylinder or +size or +sizeM or +sizeK (600-241152, default 241152): 241152

7. Command (m for help): w

8. mkfs.vfat /dev/mmcblk1p1

9. mount -t vfat /dev/mmcblk1p1  /mnt/

10. cp ramdisk.img  uImage  /mnt/

11. sync

12. umount /mnt/

以上 命令 都是在 開發板 linux 內核中 執行

 

1. 重啟開發板 進入 uboot  命令行  配置uboot 環境變量

FS6818# set bootargs "root=/dev/ram rw initrd=0x42000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200"

FS6818# set bootcmd "fatload mmc 0 0x41000000 uImage;fatload mmc 0 0x42000000 ramdisk.img; bootm 41000000 42000000"

2. 執行 boot 命令,開始解析 bootcmd 環境變量

FS6818# boot

 

 


免責聲明!

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



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