1. 程式人生 > >busybox的安裝和配置/最小根檔案系統的製作

busybox的安裝和配置/最小根檔案系統的製作

1.瞭解uImage和zImage:
linux核心經過編譯後會生成一個elf格式的可執行程式,叫做vmlinux或vmlinuz,這個是原始的未經任何處理加工的原版核心elf檔案,嵌入式系統部署時燒錄一般不是這個vmlinux,而是要用objcopy工具去製作成燒錄映象格式的檔案Image(這個製作燒錄映象主要目的是縮減大小,節省磁碟)。原則上Image就可以直接被燒錄在flash上啟動執行,,但是實際並不是那麼簡單,實際上linux的作者們覺得Image還是太大了,所以對Image
進行了也壓縮,並且在Image壓縮後的檔案的前端附加了一部分解壓縮程式碼,構成了一個壓縮格式的映象叫做zImage,解壓的時候,通過zImage映象頭部的解壓縮程式碼進行自解壓,然後執行自解壓出來的核心映象。
同時,uboot為了啟動linux核心,還發明瞭一種核心格式叫做uImage,uImage是由zImage加工得到的,uboot中有一個工具,可以將zImage加工成uImage,uImage是不管linux核心的事情,linux核心只管生成zImage,然後uboot中的mkimage工具再去由zImage加工成uImage來給uboot啟動,這個加工過程時間就是在zImage前邊加上64位元組的uImage的頭資訊即可。
注:如果直接在kernel底下去make uImage會提示mkimage command not found,解決方式是去uboot/tools目錄下執行cp mkimage /usr/local/bin 複製mkimage工具到系統目錄下,再去make uImage即可。
原則上,uboot啟動時應該給他uImage格式的映象,但是實際上uboot中也支援zImage,是否支援就看是否定義了LINUX_ZIMAGE_MAGIC這個巨集,所以可以看出,有些uboot是支援zImage啟動的,有些是不支援的,但是所有的uboot肯定都支援uImage啟動。

一.開發板的啟動方式:emmc啟動(儲存容量大,也快)
二.從emmc啟動需要以下幾種檔案,如圖:
這裡寫圖片描述
三.busybox的安裝和配置
1.首先配置和編譯busybox
A.將busybox-1.27.2.tar.bz2上傳到linux上面,並且解壓
這裡寫圖片描述
這裡寫圖片描述
2.配置busybox
(1)修改busybox的Makefile檔案
這裡寫圖片描述
(2)在busybox的目錄下(這裡我的是[email protected]:/home/imx6/busybox-1.27.2# )make menuconfig,出現選單
這裡寫圖片描述
(3)按照下面選項進行配置
這裡寫圖片描述
(4)指定根檔案系統安裝的目錄
首先在需要的目錄下新建rootfs資料夾:mkdir rootfs
我這裡的路徑是/home/mf/Desktop/rootfs
然後進入make menuconfig選單進行路徑配置
這裡寫圖片描述


點選進入進行修改
這裡寫圖片描述
儲存配置
(5)配置完成後make
出現下面報錯miscutils/nandwrite.c:151:35: error: ‘MTD_FILE_MODE_RAW’ undeclared (first use in this function)
這裡寫圖片描述
解決方法:
a.查詢編譯器下面的相關檔案(進入以下目錄[email protected]:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/usr/include/mtd#)
這裡寫圖片描述
進行以下修改
這裡寫圖片描述
[email protected]
:/home/imx6/busybox-1.27.2# find -name nandwrite.c
新增:#include <mtd/mtd-abi.h>
這裡寫圖片描述
(6)make沒有任何報錯,執行make install(make install在所有的linux下的軟體中作用都是安裝軟體–make install的目的就是將編譯生成的可執行程式及其依賴的庫檔案、配置檔案、標頭檔案安裝到當前系統中指定(一般都可以自己指定安裝到哪個目錄下,如果不指定一般都有個預設目錄)的目錄下)
成功,生成四個資料夾bin linuxrc sbin usr:
這裡寫圖片描述
四.根檔案系統基礎知識
1.為什麼要構建根檔案系統?
應用程式位於根檔案系統上,需要構建根檔案系統。
核心啟動後先執行rest_init()–必須保證Open the /dev/console on the rootfs, this should never fail,才能夠正常執行應用程式。
以下這段核心程式碼啟動分析非本人,借鑑的一個同事整理的文件

rest_init();
   ----> kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
     ----> kernel_init 
         ----> kernel_init_freeable();
               ----> /* Open the /dev/console on the rootfs, this should never fail */
                  在根檔案系統裡邊開啟/dev/console 
             if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) //標準輸入
              pr_err("Warning: unable to open an initial console.\n");    
                   (void) sys_dup(0);    //標準輸出
                       (void) sys_dup(0);  //標準錯誤
               說明:sys_open(“/dev/console”) 和兩個(void) sys_dup(0),就是指printf、scanf、err等輸入輸出裝置從/dev/console(這裡指串列埠2)上輸出。對於其他的裝置可能是別的,比如,鍵盤和液晶啥的。

----> prepare_namespace();
               ---->mount_root();   //掛接根檔案系統

     ---->  if (execute_command) {
           if (!run_init_process(execute_command))
                   return 0;
            pr_err("Failed to execute %s.  Attempting defaults...\n",execute_command);
            }
            execute_command :就是uboot傳給核心的init引數,本例為rdinit=/linuxrc,這裡表示uboot如果定義了bootargs中:init=/linuxrc ,就會執行linuxrc,否則執行下邊的程式碼。
              if (!run_init_process("/sbin/init") ||      //4個只執行一個,執行了就不回來
               !run_init_process("/etc/init") ||
               !run_init_process("/bin/init") ||
               !run_init_process("/bin/sh"))

通過run_init_process來啟動應用程式,要麼是我們傳入的啟動引數,要麼是上邊4個其中一個。

2.根檔案系統裡面有哪些內容?–利用busybox製作
在系統中shell命令:ls cp rm 等命令的都是一個個的應用程式,busybox工具實際上就是這些命令的整合。以上busybox我使用的是1.27.2的版本
3.最小的根檔案系統需要哪些東西?
/dev/console
/dev/NULL
Init—-> busybox
/etc/inittab
配置檔案裡指定的應用程式
C庫(如果busybox編譯成靜態的程式,那麼庫可以不需要)
這裡寫圖片描述
Init本身,也就是busybox
五.最小根檔案系統製作
1.在上述新建的rootfs資料夾下面建立兩個裝置檔案/dev/console 和 /dev/NULL
mkdir dev/console
mkdir dev/NULL
2.查詢虛擬機器
這裡寫圖片描述
console : 主裝置號為5,次裝置號為1
null:主裝置號為1,次裝置號為3
所以,建立兩個新的裝置節點
[email protected]:/home/mf/Desktop/rootfs/dev/console# mknod -m 666 console c 5 1
[email protected]:/home/mf/Desktop/rootfs/dev/NULL# mknod -m 666 null c 1 3
3.建立etc目錄,構造inittab
這裡移植的是一個已經做好的典型的inittab,所以操作如下
[email protected]:/home/imx6/busybox-1.27.2/examples/bootfloppy#目錄下有一個etc資料夾,將它全部拷貝到你的rootfs目錄下的etc資料夾下,在tootfs下先新建一個etc資料夾

root@ubuntu:/home/imx6/busybox-1.27.2/examples/bootfloppy#  cp -Rf /home/imx6/busybox-1.27.2/examples/bootfloppy/etc/* /home/mf/Desktop/rootfs/etc

4.C庫
進入到編譯busybox的C庫,這裡我的路徑是,將
/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf裡面需要的檔案動態連結到rootfs的lib下(在rootfs下新建lib資料夾)

root@ubuntu:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf# cp -d *.so* /home/mf/Desktop/rootfs/lib

5.驗證
將rootfs打包,生成一個rootfs.tar.bz2

root@ubuntu:/home/mf/Desktop/rootfs# tar jcf ../rootfs.tar.bz2 */

將rootfs.tar.bz2檔案從linux傳到win中,然後放在mfgtools的相應位置,具體操作參考mfgtools燒錄的操作
觀察:開發板是否能夠正常啟動,能夠正常啟動則是正確的啦
接著只需要對rootfs做進一步的完善
六.完善根檔案系統
利用nfs服務將開發板掛載到虛擬機器上後,可以在虛擬機器上對開發板進行操作
1.這裡以掛載proc虛擬檔案為例,需要在inittab裡邊加上一個指令碼
這裡寫圖片描述
執行mount –a 命令後,將掛接proc、tmpfs檔案系統
寫成mount –a 它會依賴於etc/fstab ,根據fstab的指示來掛載根檔案系統
2.在fstab檔案裡邊加上(這裡只掛接proc)
proc /proc proc defaults 0 0
這裡寫圖片描述
chmod +x rcS
這樣我們這個檔案系統啟動就會執行rcS,可以在proc目錄看到所有執行的檔案。

相關推薦

busybox安裝配置/檔案系統製作

1.瞭解uImage和zImage: linux核心經過編譯後會生成一個elf格式的可執行程式,叫做vmlinux或vmlinuz,這個是原始的未經任何處理加工的原版核心elf檔案,嵌入式系統部署時燒錄一般不是這個vmlinux,而是要用objcopy工具去製

busybox(三)檔案系統

目錄 busybox(三)最小根檔案系統 引入 構建終端 構造inittab 配置應用程式 構建C庫 製作映像檔案yaffs title: busybox(三)最小根檔案系統 tag: arm date: 2018-11-14 1

busybox製作檔案系統

接上篇,qemu啟動linux核心 ,啟動核心失敗後,開始製作一個最小的ramdisk根檔案系統。 根檔案系統製作工具busybox,還是走大眾路線吧。原始碼包下載地址:https://busybox.net/ 直接進入busybox的根目錄,準備編譯,使用預設配置檔案defconfig,

建立檔案系統

開發板 : JZ2440 Linux核心 : Linux-2.6.22.6 Busybox1.29.3 最小根檔案系統所需的部分: 1./dev/console   /dev/null  :建立根檔案系統所必備的,指出了所需要的標準輸入,標準輸出,標準錯誤裝置終端。 2.init

Ubuntu下安裝配置Apache2,編覺得挺不錯的,現在就分享給大家

fault 引用 興趣 ini wan tro 主配置文件 allow ets   本篇文章主要介紹了詳解Ubuntu下安裝和配置Apache2,小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。有興趣的朋友可以了解一下。(http://xz.8682222.com)

Linux核心移植檔案系統製作(詳細步驟精講)

start_kernel是所有 Linux 平臺進入系統核心初始化後的入口函式,它主要完成剩餘的與硬體平臺相關的初始化工作,在進行一系列與核心相關的初始化後,呼叫第一個使用者程序-init 程序並等待使用者程序的執行,這樣整個 Linux 核心便啟動完畢。該函式所做的具體工作有:呼叫 setup_arch

u-boot下配置掛載NFS檔案系統

一、在linux系統主機下安裝NFS伺服器        在ubuntu10.04下安裝命令為:        sudoapt-get  install nfs-kernel-server 二、配置nfs伺服器        在ubuntu下安裝完ssh伺服器後預設開機啟動

製作linux檔案系統燒錄到iTop-4412開發板上

使用的開發板為訊為iTop-4412精英版1,新建linux最小系統使用busybox,官網為http://www.busybox.net/這裡使用的版本是首先將busybox-1.21.1.tar.bz2拷貝到ubuntu系統下解壓,解壓命令: tar -xvf b

Parallel Python(pp)分散式計算框架安裝配置問題(基於win10系統

“分散式計算”也是當今IT行業的一個非常火熱的名詞,大家都知道的谷歌機房,還有2013年諾貝爾物理學獎獲獎專案“希格斯波色子”,都利用了“分散式計算”來分擔一部分計算量從而提高計算效率,尤其在資料科學領域“分散式計算”起到舉足輕重的作用。 ParallelPy

Linux檔案系統製作與各種掛載方式的實現

Linux根檔案系統的製作 什麼是檔案系統 計算機的檔案系統是一種儲存和組織計算機資料的方法,它使得對其訪問和查詢變得容易,檔案系統使用檔案和樹形目錄的抽象邏輯概念代替了硬碟和光碟等物理裝置使用資料塊的概念,使用者使用檔案系統來儲存資料不必關心資料實際儲存在硬碟(或者光碟)的地址為多少的資料

cramfs檔案系統製作啟動總結

cramfs啟動根檔案系統 Cramfs:Compressed ROM File System   Cramfs是Linux的創始人 Linus Torvalds參與開發的一種只讀的壓縮檔案系統。它也基於MTD驅動程式。   cramfs擁有以下一些特性:  採用實時解壓

Tiny4412 ARM開發環境搭建—NFS網路檔案系統製作

Tiny4412從SD卡啟動的簡單網路檔案系統製作 1. 簡介 嵌入式系統能夠在開發板上正常執行,需要先進行系統配置,一個完整的嵌入式系統應該包含的幾個部分::uboot,kernel,rootfs,appfs。這幾部分在ARM板Flash上的位置關係

Linux-2.6.32.2核心在mini2440上的移植(四)---檔案系統製作(1)

ROMFS MTD (C) 2007 Red Hat, Inc.msgmni has been set to 109 alg: No test for stdrng (krng) io scheduler noop registered io scheduler anticipatory registered

Linux核心映象及檔案系統製作

一、系統開發平臺介紹    本次試驗是基於九鼎創展公司嵌入式開發板x210v3, 核心處理器是ARM Cortex–A8架構的S5PV210,主頻1GHz。  PC機Linux版本:Ubuntu Kylin 14.04  核心版本:3.13 二、Linux核心配置和編譯 2

的BabyLinux系統製作過程詳解

,而不在乎你的linux到底怎麼工作,那麼這份文件也許不太適合你.另外,如果你是linux愛好者, 但是目前還是一個剛剛入門的newbi,我建議你先把linux命令學好.不過我想我會盡可能的把這份文件寫詳細一些,如果你有足夠的毅力,或許一個 newbi也能成功做一個babylinux.或者,你遇到一件很不巧的

LINUX移植——檔案系統製作(一)

上一篇文章當中,說了說怎樣搭建nfs伺服器的過程,這也是製作根檔案系統前必須的準備工作,當然也可以用其他方法,但從除錯的角度來說,還是nfs最適合了。這篇文章咱們正式開始製作根檔案系統,主要內容如下:

tiny linux: 核心精簡的檔案系統製作

tiny_linux要求實現以下兩點: 精簡linux核心映象,要求在支援TCP/IP資料傳輸的情況下,核心映象和正常執行所需記憶體能夠做到儘可能的小。 採用busybox製作根檔案系統,利用kernel mode linux補丁,使得busybox執行

Linux檔案系統製作

1 開發環境     宿主機:Ubuntu14.04(32bit)     開發板:Mini2440     Kernel:2.6.39.4     BusyBox:1.24.2 2 建立目錄 (1)建立根目錄rootfs,這個目錄就是要移植到Mini2440開發板的目錄:

檔案系統製作詳解

什麼是根檔案系統       linux最頂層的目錄"/"被稱作根目錄,與Windows上的目錄結構有較大的不同。系統中只有一個根目錄,路徑是“/”,而其它的分割槽只是掛載在根目錄中的一個資料夾。系統載入linux核心後,就會掛在一個儲存裝置到根目錄。存在與這個裝置中的檔案系

JZ2440:yaffs2 格式檔案系統製作

YAFFS目前有yaffs、yaffs2兩個版本,一般來說,yaffs對小頁(512B+16B/頁)的NandFlash(68M)有很好的支援,yaffs2對大頁(2K+64B/頁)的NandFlash(128M、256M或者更大)支援更好。 我的 nandflash