Embedded System 修課紀錄(4)
上一次建立 Linux Kernel 並且燒錄到開發板上面,本次的步驟是將上次開發板上面的 Linux 之檔案系統更換。這裡會用到的知識大概就是哪些東西是位於那個記憶體區段,這些似乎是會隨著廠商的資訊來的,在此也一併將這個整理表格紀錄。
何謂 File System (檔案系統)
打開檔案總管,一層一層的目錄以及這些目錄所形成的宏偉的樹狀結構就是 File System 檔案系統,每一個作業系統的架構規劃又有不同。Windows 的 "Documents and Settings" 是不是長得很像 Linux 的 "/home",嵌入式課程幾乎都會採用到 Linux 作業系統,而大致上了解一下它的架構及可,例如: /bin: 放 command 的 binaries code, /etc: 設定檔, /home: 系統上的家目錄以及使用者設定, /lib: 函式和核心的 modules, /root: ROOT 的家目錄...。然而在這些目錄的最上面也是大家常常 cd / 去的地方,就是 Root File System 根目錄。甚麼時候見過它?
Root FileSystem
沒錯就是安裝 Linux 時選擇自訂分割的話,可以看到的畫面。大部分是設定 / 以及 swap 空間,其餘的架構則共用剩下的磁碟空間來做建置。Root FileSystem 大致上包含三部份: 各種常用的工具、一些關於系統組態的設定檔、基本的資料夾結構。我們可以在裡面加入開機就馬上執行的一些執行程式,也就是製作符合我們需求的 Linux 檔案架構。
檔案目錄架構
假設我們要再 /home/sn/lab5_project/ 底下完成操作,檔案或是編譯的路徑必須小心處理。
操作流程
1. [Busybox Settings] > [Build Options] > [Cross Compiler prefix]
2. [Busybox Settings] > [Installation Options] > BusyBox installation prefix (./tmp) 因此之後建立的檔案系統都會擺在 tmp 中喔。 3. [Miscellaneous Utilities] > [ ] ionice, [ ] inotifyd 不要勾選
Reference
[1.] opencsl.openfoundry.org::Lab 3 製作 root filesystem
[2.] Device nodes
何謂 File System (檔案系統)
打開檔案總管,一層一層的目錄以及這些目錄所形成的宏偉的樹狀結構就是 File System 檔案系統,每一個作業系統的架構規劃又有不同。Windows 的 "Documents and Settings" 是不是長得很像 Linux 的 "/home",嵌入式課程幾乎都會採用到 Linux 作業系統,而大致上了解一下它的架構及可,例如: /bin: 放 command 的 binaries code, /etc: 設定檔, /home: 系統上的家目錄以及使用者設定, /lib: 函式和核心的 modules, /root: ROOT 的家目錄...。然而在這些目錄的最上面也是大家常常 cd / 去的地方,就是 Root File System 根目錄。甚麼時候見過它?
(圖片來自於 http://ylin77.blogspot.com/ 網站的擷取圖案)
Root FileSystem
沒錯就是安裝 Linux 時選擇自訂分割的話,可以看到的畫面。大部分是設定 / 以及 swap 空間,其餘的架構則共用剩下的磁碟空間來做建置。Root FileSystem 大致上包含三部份: 各種常用的工具、一些關於系統組態的設定檔、基本的資料夾結構。我們可以在裡面加入開機就馬上執行的一些執行程式,也就是製作符合我們需求的 Linux 檔案架構。
檔案目錄架構
假設我們要再 /home/sn/lab5_project/ 底下完成操作,檔案或是編譯的路徑必須小心處理。
操作流程
- 下載 BusyBox
cd /home/sn/lab5_project/ // 以序建立所缺的 filesystem 以及 busybox 兩個目錄 mkdir -p /home/sn/lab5_project/filesystem/busybox // 下載 Busybox 原始碼 wget http://busybox.net/downloads/busybox-1.15.2.tar.bz2 // 解壓縮到前面建立的資料夾 tar -jxvf busybox-1.15.2.tar.bz2 -C /home/sn/lab5_project/filesystem/busybox
- 下載 Patch 檔案
patch -p0 < busybox-1.15.2-ash.patch patch -p0 < busybox-1.15.2-awk.patch patch -p0 < busybox-1.15.2-buildsys.patch patch -p0 < busybox-1.15.2-flash.patch patch -p0 < busybox-1.15.2-grep.patch patch -p0 < busybox-1.15.2-ping.patch patch -p0 < busybox-1.15.2-split.patch編譯 Busybox
cd /home/sn/lab5_project/filesystem/busybox/busybox-1.15.2 // 類似文字介面的導引,輔助邊益資訊 make menuconfig
1. [Busybox Settings] > [Build Options] > [Cross Compiler prefix]
/home/sn/lab5_project/filesystem/toolchain/bin/arm-unknown-linux-gnu-要用絕對路徑,以及最後面要記得 '-' 一槓。
2. [Busybox Settings] > [Installation Options] > BusyBox installation prefix (./tmp) 因此之後建立的檔案系統都會擺在 tmp 中喔。 3. [Miscellaneous Utilities] > [ ] ionice, [ ] inotifyd 不要勾選
// 修改 vim coreutils/fsync.c // 在前面新增以下幾行 # ifndef O_NOATIME # define O_NOATIME 01000000 # endif // 三部曲的後兩部 make && make install
- 建立檔案系統目錄
cd tmp // 建立以下目錄即可(P.S 已經很多了...) mkdir etc lib var proc mnt dev tmp // 建立裝置點(黑洞?!) // 實際上應用程式是透過 devices nodes 存取 kernel 的資源 cd ../dev sudo mknod console c 5 1 sudo mknod tty c 5 0 sudo mknod tty0 c 4 0 sudo mknod tty1 c 4 1 sudo mknod fb0 c 29 0 sudo mknod fb1 c 29 1 sudo mknod null c 1 3 sudo mknod mem c 1 1 sudo mknod zero c 1 5 sudo mknod random c 1 8 sudo mknod ttyS0 c 4 64 sudo mknod ram0 b 1 0 sudo ln -s fb0 fb助教的文件中是補充說明了 http://www.kernel.org/pub/linux/docs/device-list/devices.txt,越看越霧煞煞...
// 建立系統預設執行的程式 cd ../etc vim inittab // 填寫 console:: sysinit:/etc/rcS ttyS0::respawn:-/bin/sh vim rcS // 填寫 #!/bin/sh mount -t proc proc /proc export LD_LIBRARY_PATH=/lib // 更改權限 chmod 777 inittab rcS到此已經打檔案系統的環境建議完畢,下一步是要把這樣的環境給製作出映像檔(Image)。
- 製作 Image 檔案
// 安裝工具 sudo apt-get install mtd-tools // 切換目錄 cd /home/sn/lab5_project//filesystem/busybox/busybox-1.15.2 // 製作 mkfs.jffs2 -v -e 131072 --pad=0xF00000 -r tmp -o rootfs.jffs2Compression errors:0 就是完成製作囉。 燒錄新的檔案系統
setenv serverip 192.168.0.1 setenv ipaddr 192.168.0.2 printenv serverip ipaddr // 設定開發板 IP sudo ifconfig eth0 192.168.0.1 // 開始下載與燒錄 tftp A1480000 rootfs.jffs2 protect off 480000 1FFFFFF erase 480000 1FFFFFF cp.b A1480000 480000 F00000 // 儲存設定 setenv bootcmd run linux saveenv // 重開 boot大致上就是完成囉,可以進去開啟後的 Linux, command line 前面得部分似乎跟之前得有所不同呢~
Reference
[1.] opencsl.openfoundry.org::Lab 3 製作 root filesystem
[2.] Device nodes
Comments
Post a Comment