1. 程式人生 > >韋東山第11課-構建根檔案系統busybox、啟動引數

韋東山第11課-構建根檔案系統busybox、啟動引數

1 編譯busybox:

make menuconfig (具體見《嵌入式linux應用開發完全手冊》P347

make

[email protected]:~/workspace/jz2440/systems/busybox-1.7.0$ make CONFIG_PREFIX=../firstbusybox install    //將檔案系統安裝在該目錄下

之後要構建檔案系統

{

2 構建檔案系統:(詳細見《嵌入式linux開發手冊 P352)

2.1 建立lib目錄,拷貝×.so× 到lib  P350


2.2 構建 etc 目錄:

2.2.1 etc/initab  

//init程序根據/etc/inittab 檔案來建立其它子程序,比如呼叫指令碼配置ip(/etc/init.d/rcS),掛接檔案系統(),啟動shell

{

(initab中的沒一條都是一個子程序)

# /etc/inittab

::sysinit:/etc/init.d/rcS

s3c2410_serial0::askfirst:-/bin/sh    //用s3c2410_serial0這個裝置啟動shell

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

<id>:<runlevels>:<action>:<process>

例如:

ttySAC0::askfirst:-/bin/sh

對於Busybox init程序,上述各個欄位作用如下:

<id>: 表示這個子程序要使用的控制檯(既標準輸入、標準輸出、標準錯誤裝置)。若果省略,則使用與init程序一樣的控制檯

<runlevels>:對於busybox init程式,這個欄位沒有意思,可以省略。

<action>:表示init程序如何控制這個子程序。

<process>:要執行的程式,它可以只可執行程式,也可以是指令碼

如果<process>欄位前有“-”字元,這個程式被稱為“互動的”

所以:::sysinit:/bin/sh 使用的是和init程序一樣的控制檯

而我們的console使用的是ttySAC0,所以就報錯了。

}

2.2.2 etc/init.d/rcS  //用shell命令執行指令碼,其中用 mount -a 根據 etc/fstab中的資訊掛載; 開機啟動的命令

{

內容:

{

#!/bin/sh    //表示是一個指令碼檔案,執行時用/bin/sh解析

ifconfig eth0 192.168.1.17 

mount -a  //掛接/etc/fstab 檔案所指的所有檔案

}

}

2.2.3 etc/fstab    // 貌似會開機自動執行

{

# device    mount-point   type   options   dump    fsck   order

proc  /proc   proc   defaults   0    0

tmpfs   /tmp   tmpfs    defaults  0  0

}

etc目錄總結:init程式呼叫/etc/inittab  ;/etc/inittab 呼叫/etc/fstab ;

3 構建dev目錄:

方法一:靜態建立裝置檔案:sudo mknod console c 5 1 ;sudo mknod null  c 1  3  ; 等

方法二:使用mdev建立裝置檔案:

{

改進:udev機制:自動建立/dev/裝置(p354)

mdev是udev的簡化版;在busybox中搜索mdev獲得相關資訊

}

構建其他目錄:

}

{

4 製作檔案系統映象:

方法一:製作ysffs2映像檔案(書上是ysffa1的檔案 針對小頁的nand flash用的 一頁512位元組; 現在是2048,是大頁的,要用ysffa2)

之後要構建檔案系統

[email protected]:/work/system$ tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2 

[email protected]:/work/system/Development_util_ok/yaffs2/utils$ make menuconfig;make 

[email protected]:/work/system/Development_util_ok/yaffs2/utils$ sudo cp mkyaffs2image /usr/local/bin/

[email protected]:/work/system/Development_util_ok/yaffs2/utils$ sudo chmod +x /usr/local/bin/mkyaffs2image

[email protected]:~/workspace/jz2440/systems$ mkyaffs2image  firstbusybox firstbusybox.yaffs2

得到yaffs2檔案系統 firstbusybox.yaffs2

方法二:製作jffs2 印象檔案:

{

P360

會出現錯誤;VFS;mounted root (yaffs filesystem).

需要指定根檔案系統的型別:set rootfstype=jffs2;saveenv;

製作海思的jffs2:

hisilicon$ mkfs.jffs2 -d ./rootfs -l -e 0x40000 -o jffs2-root.img

其中, mkfs.jffs2 工具可以從網際網路中下載,也可以在 SDK 包中找到。 rootfs 為之前已
經制作好的根檔案系統。引數說明如

經制作好的根檔案系統。引數說明如4-2所示。

4-2 JFFS2 引數表

引數 說明
d 指定根檔案系統
l little-endian 小端模式
e Flash 的塊大小
o 輸出映像檔案

}

5 啟動後掛載網路檔案系統NFS:

{

   條件:1 伺服器允許那個目錄被掛載

                1.1 (要在/etc/exports中定義這個目錄,及新增/home/book/workspace/jz2440/systems/firstbusybox  *(rw,sync,no_root_squash));

                1.2   重啟單板nfs服務 sudo /etc/init.d/nfs-kernel-server restart

                1.3   修改資料夾許可權: sudo chmod 777 /home/book/workspace/jz2440/systems/firstbusybox  -R

                1.4    mount -t nfs 10.170.33.245:/home/book/workspace/jz2440/systems/firstbusybox /mnt   //本地實驗

                 1.5   本地去掛載:sudo umount /mnt

           2 單板去掛載;

                  mount -t nfs -o nolock, vers=2 192.169.1.19:/work/nfs_root /mnt

}

  用nfs網路檔案系統啟動:

{

寫該啟動引數:

bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

改為:

在核心原始碼的 。。/document/nfsroot 中有講解:

root=/dev/nfs

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>

解析為(附帶了輸入的內容):

改後的資訊:setenv bootargs  noinitrd   root=/dev/nfs  nfsroot=192.168.7.21:/home/book/workspace/jz2440/systems/firstbusybox ip=192.168.7.17:192.168.7.21:192.168.7.1:255.255.255.0::eth0:off  init= /linuxrc  console=ttySAC0

 (hi3518e引數) setenv bootargs  noinitrd   root=/dev/nfs  nfsroot=10.170.52.106: /home/wooya/work/hi3518e/Hi3518_SDK_V1.0.A.0/package/rootfs_uclib ip=10.170.52.111:10.170.52.106:10.170.1.1:255.255.0.0::eth0:off  init= /linuxrc  console=ttyAMA0 

警示:用nfs掛載虛擬檔案系統時,不要在/etc/init.d/rcS 中 開機設定ip地址(如:ifconfig eth0 ×××)

原資訊:set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

saveenv

}

ps命令可以參看當前系統什麼程式在跑(ps命令是一個虛擬的掛載系統)

要想使用ps命令:mkdir proc;mount -t proc none /proc

改進:udev機制:自動建立/dev/裝置

mdev是udev的簡化版;在busybox中搜索mdev獲得相關資訊

6 不同檔案系統的啟動引數

YAFFS啟動引數設定:
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3; save //實測有效
jffs2設定啟動引數:
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2; save

hi3518e啟動引數:

setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs) '

set bootargs  noinitrd   root=/dev/nfs  nfsroot=10.170.52.106:/home/wooya/work/hi3518e/Hi3518_SDK_V1.0.A.0/package/rootfs_uclibc ip=10.170.12.61(該ip隨意設定):10.170.52.106:10.170.1.1:255.255.0.0::eth0:off  init=/linuxrc  console=ttyAMA0



jz2440啟動引數:

set bootargs  console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2 mtdparts=nandflash0:[email protected](bootloader),128k(params),2m(kernel),-(root) 

set bootargs  noinitrd   root=/dev/nfs  nfsroot=10.170.12.158:/work/nfs_root/first_fs ip=10.170.12.61:10.170.12.158:10.170.1.1:255.255.0.0::eth0:off  init=/linuxrc  console=ttySAC0

set bootargs  noinitrd   root=/dev/nfs  nfsroot=10.170.12.158:/home/book/workspace/jz2440/systems/firstbusybox ip=10.170.12.61:10.170.12.158:10.170.1.1:255.255.0.0::eth0:off  init=/linuxrc  console=ttySAC0

警示:用nfs掛載虛擬檔案系統時,不要在/etc/init.d/rcS 中 開機設定ip地址(如:ifconfig eth0 ×××)

    (2) nfs server xx.xx.xx.xx not response,still try

     總出現如題所示提示,然後DM9000停止活動,折騰了一下午,原來是由於根檔案系統中/etc/init.d/rcS中網路配置部分導致的問題,由於nfs啟動引數已經指定了linux的IP、閘道器等,如果在啟動指令碼中在設定一次就會導致這個問題,而不是網上說的由於使用UDP(當然這也可能導致出現該問題)。簡單地在/etc/init.d/rcS中註釋掉網路設定部分後,nfs成功掛載。

相關推薦

東山11-構建檔案系統busybox啟動引數

1 編譯busybox: make menuconfig (具體見《嵌入式linux應用開發完全手冊》P347 make [email protected]:~/workspace/jz2440/systems/busybox-1.7.0$ make CONFI

東山091節 u-boot分析之編譯體驗“之學習筆記

Windows系統啟動過程,PC上電 => 進入BIOS(引導作業系統)=> windows => 識別C,D等的硬碟 => 執行應用程式 嵌入式系統啟動過程,上電 => bootloader(引導核心)=> LINUX => 掛

構建檔案系統

read  INSTALL  rirst. 總結:應用程式所需要的檔案 1./dev/console /dev/null 2.配置檔案/etc/inittab 3.配置檔案裡面指定的應用程式 4.庫檔案 5.init本身,即busybox 以

11 std::bind和std::function(2)_std::bind綁定器

pan std name iostream emf end cnblogs left eid 1. 溫故知新:std::bind1st和std::bind2nd (1)bind1st、bind2nd首先它們都是函數模板,用於將參數綁定到可調用對象(如函數、仿函數等)的第1個

Js筆記-11

test this關鍵字 多次 nbsp 活動 ons 多個 tex 語法 // 第11課 作用域精解 運行期上下文,當函數執行時,會創建一個成為執行期上下文的內部對象。一個執行期上下文定義了一個函數執行時的環境,函數每次執行時對應的執行期上下文都是獨一無二的

機器學習筆記 11

        接著第10課末尾,闡述選擇特徵的另一種選擇方式:貝葉斯規範化 (1)貝葉斯規範化 也是為了解釋特徵選取過多造成的過擬合問題 以線性迴歸為例,從頻率學派的觀點出發,當我們利用最大似然法求解迴歸方程中的sita向量時,認為sita就是真

11真實世界中的網頁解析

目標:爬取真實世界中的網頁資訊 熟悉: Request庫: 是Python中的一個HTTP網路請求庫,用來簡化網路請求!能夠讓你的Python程式向伺服器傳送HTTP請求,獲得網頁資料的庫。 time庫: 與時間相關的庫,因為在向網站伺服器請求的時候,如果你的requ

嵌入式-第一季-11

第十一課 TFTP與NFS伺服器 一.交叉開發 嵌入式系統開發採用交叉開發模式,其中產生嵌入式軟體的平臺叫做宿主機,通常為PC電腦,執行嵌入式軟體的平臺稱為目標機。宿主機一般通過網路,USB,JTAG等方式講軟體下載到目標機。 二.tftp伺服器 為了完成交叉開發,我們可以通過資料線來下載資料,同樣,

11-11_01_Linux網絡配置之一

仲裁 linux 介質 設備 控制 配置 linu 發送信號 時間 26前,講解課後題一、網絡知識,以太網1.信號是電磁信號2.協議protocol:多長時間是一個信號3.千兆,百兆100Mb/s,十兆10Mbps:每秒接受發送信號的個數常說的是MB=兆,Byte. b/s

11--11_04_Linux網絡配置之四 ifconfig及ip命令詳解

config linux 在線 自動分配 隨機 隨機生成 內核的功能 conf 而不是 一、備用DNS,主DNS是最快的。當主DNS不在線時才用備用DNS。而不是主DNS解析不出來的時候就。主的解析不出來,備用 的肯定也解析不出來,都是國際聯網的。二、DHCP(dynami

C語言11——typedof和#define

typedef 可以使用它來為型別取一個新的名字。 typedef unsigned char BYTE; BYTE b1, b2; 按照慣例,定義時會大寫字母,以便提醒使用者型別名稱是一個象徵性的縮寫,但也可以使用小寫字母。 使用 typedef 來為使用

《19.檔案系統構建實驗及過程詳解》

《19.根檔案系統構建實驗及過程詳解》 第一部分、章節目錄 2.19.1.根檔案系統的構建路線 2.19.2.busybox的移植實戰 2.19.3.inittab詳解 2.19.4.busybox原始碼分析1 2.19.5.busybox原始碼分析2 2.19.6.rcS檔案介紹1 2

jdbc篇5:properties檔案和Properties類

  這節課我們來學習一種新的檔案和一個新的類     properties檔案: 特點: 純文字 每一行都是 xxx=yyy的形式,類似鍵值對 常被用來當做配置檔案      Properties類:

11 迴圈巢狀和演算法

一、迴圈巢狀  1、列印九九乘法表 for i in range(1, 10): # 行數 for j in range(1, i + 1): # print('{} * {} = {}'.format(j, i, i * j), end = '\t' ) #

《快學 Go 語言》 11 —— 千軍萬馬跑協程

協程和通道是 Go 語言作為併發程式語言最為重要的特色之一,初學者可以完全將協程理解為執行緒,但是用起來比執行緒更加簡單,佔用的資源也更少。通常在一個程序裡啟動上萬個執行緒就已經不堪重負,但是 Go 語言允許你啟動百萬協程也可以輕鬆應付。如果把協程比喻成小島,那通道就是島嶼之間的交流橋樑,資料搭乘通道從一個協

[11]統計:集中趨勢

– Start 集中趨勢 (central tendency) 又稱“資料的中心位置”,常用測量方法有均值,中位數和眾數。 import numpy as np from scipy import stats # 定義資料集 data_set = np.ar

11:自動型別轉換

有這麼一個詞叫“狸貓換太子”,變數的資料型別就存在這樣的情況。資料型別存在自動轉換的情況,比如: 自動轉換髮生在不同資料型別運算時**,在編譯的時候自動完成**。自動轉換遵循的規則就好比小盒子可以放進大盒子裡面一樣,下圖表示了型別自動轉換的規則 注:位元組小

11:jvm的gc日誌young Generation下minor GC每個欄位徹底詳解

內容:     1.演示Minor GC     2.徹底分析Minor GC的每一個欄位 一、演示Minor GC [GC (Allocation Failure) [PSYoungGen:

構建linux檔案系統

核心 啟動後回去呼叫第一個程式init、給使用者提供操作介面的shell程式 、應用程式所依賴的庫檔案。這些必須的基本的檔案合起來稱為根檔案系統,他們存放在一個分割槽中,Linux系統啟動之後首先掛載

一步一步製作yaffs/yaffs2檔案系統(四)---構建etcdev等剩餘目錄

                            開發環境:Ubuntu 12.04                             開發板:mini2440  256M NandFlash   64M SDRAM