韋東山第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
韋東山“第09課第1節 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根檔案系統(四)---構建etc、dev等剩餘目錄
開發環境:Ubuntu 12.04 開發板:mini2440 256M NandFlash 64M SDRAM