busybox(三)最小根檔案系統
目錄
title: busybox(三)最小根檔案系統
tag: arm
date: 2018-11-14 17:57:08
---
busybox(三)最小根檔案系統
引入
在busybox(一)淺析
中,得出結論,一個最小的根檔案系統需要以下幾個元素
dev/console dev/null sbin/init-------------busybox提供,至少需要這個應用程式,這是linux啟動的第一個應用程式 etc/inittab-----------配置檔案,定義了一些應用程式 配置檔案制定的應用程式----配置檔案指定的應用程式 C庫--------------------應用程式的C庫
構建終端
首先來建立標準輸入輸出錯誤以及其他輸出定位
dev/console
dev/null
檢視下Linux下的這兩個檔案的屬性
[email protected]:~/stu/first_fs$ ls -l /dev/null /dev/console
crw------- 1 root root 5, 1 2018-11-14 18:00 /dev/console
crw-rw-rw- 1 root root 1, 3 2018-11-14 17:59 /dev/null
這裡插入一下,普通的ls -l
檔案資訊如下,由此可以看到這兩個檔案是字元裝置
使用mknod
來建立字元裝置或者塊裝置,格式如下:
mknod(選項)(引數)
選項
-Z:設定安全的上下文;
-m:設定許可權模式;
-help:顯示幫助資訊;
--version:顯示版本資訊。
引數
檔名:要建立的裝置檔名;
型別:指定要建立的裝置檔案的型別;
主裝置號:指定裝置檔案的主裝置號;
次裝置號:指定裝置檔案的次裝置號。
建立裝置
mkdir dev cd dev sudo mknod console c 5 1 sudo mknod null c 1 3 [email protected]:~/stu/first_fs/dev$ ls -l total 0 crw-r--r-- 1 root root 5, 1 2018-11-14 18:29 console crw-r--r-- 1 root root 1, 3 2018-11-14 18:35 null
構造inittab
如果不構造,會使用預設的配置項[參見busybox(一)淺析
],預設的路徑在"/etc/inittab
,參見busybox淺析
::CTRLALTDEL:reboot
::SHUTDOWN:umount -a -r
::RESTART:init
::ASKFIRST:-/bin/sh:
tty2::ASKFIRST:-/bin/sh
tty3::ASKFIRST:-/bin/sh
tty4::ASKFIRST:-/bin/sh
::SYSINIT:/etc/init.d/rcS
手動構造一個簡單的指令碼列表在etc
下,將標準輸入,輸出,錯誤定位到console
上
console::askfirst:-bin/sh
mkdir etc
vi etc/inittab
配置應用程式
我們在inittab
並沒有使用自定義的使用者程式,也就不需要配置,跳過
構建C庫
拷貝所有的.so
檔案,cp
命令中使用-d
的目的是:假設原始檔為連結格式,那麼cp
的物件也是連結格式的,沒有複製原始檔.檢視下我們當前的gcc
目錄,.a
表示靜態庫不需要,使用-d
來拷貝.cp命令淺析
注意這裡的源目錄是在arm-linux/lib/
下
[email protected]:~/stu/first_fs$ which arm-linux-gcc
/work/tools/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc
mkdir lib
cp /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/*.so* lib -d
製作映像檔案yaffs
這裡使用yaffs2
映像格式,工具包是yaffs_source_util_larger_small_page_nand.tar
,這是老師製作好的工具,支援大頁和小頁的NandFlash
.yaffs1
支援小頁格式(512位元組),我們的NANDFLASH
是2048位元組,使用大頁模式,使用yaffs2
,可執行檔案是mkyaffs2image
tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2
[email protected]:~/stu$ cd Development_util_ok/
[email protected]:~/stu/Development_util_ok$ ls
yaffs yaffs2
編譯程式碼
cd yaffs2/utils/
make
檢視下工具mkyaffs2image
[email protected]:~/stu/Development_util_ok/yaffs2/utils$ ls -l
total 132
-rw------- 1 book book 1770 2008-07-08 00:35 Makefile
-rwxr-xr-x 1 book book 18266 2018-11-14 19:02 mkyaffs2image
-rw------- 1 book book 19669 2008-07-08 00:36 mkyaffs2image.c
-rw-r--r-- 1 book book 9412 2018-11-14 19:02 mkyaffs2image.o
-rwxr-xr-x 1 book book 18126 2018-11-14 19:02 mkyaffsimage
-rw------- 1 book book 16206 2008-02-29 10:26 mkyaffsimage.c
-rw-r--r-- 1 book book 8168 2018-11-14 19:02 mkyaffsimage.o
-rw------- 1 book book 6731 2008-02-29 10:26 nand_ecc.c
-rw-r--r-- 1 book book 1776 2018-11-14 19:02 nand_ecc.o
lrwxrwxrwx 1 book book 14 2018-11-14 19:02 yaffs_ecc.c -> ../yaffs_ecc.c
-rw-r--r-- 1 book book 2496 2018-11-14 19:02 yaffs_ecc.o
-rw------- 1 book book 1416 2008-02-29 10:26 yaffs_packedtags1.c
-rw-r--r-- 1 book book 1216 2018-11-14 19:02 yaffs_packedtags1.o
lrwxrwxrwx 1 book book 22 2018-11-14 19:02 yaffs_packedtags2.c -> ../yaffs_packedtags2.c
-rw-r--r-- 1 book book 2160 2018-11-14 19:02 yaffs_packedtags2.o
lrwxrwxrwx 1 book book 23 2018-11-14 19:02 yaffs_tagsvalidity.c -> ../yaffs_tagsvalidity.c
-rw-r--r-- 1 book book 822 2018-11-14 19:02 yaffs_tagsvalidity.o
貌似新的ubuntu
中的工具over了,直接使用製作好的mkyaffs2image
sudo cp mkyaffs2image /usr/local/bin
sudo chmod +x /usr/local/bin/mkyaffs2image
直接輸入mkyaffs2image
檢視幫助
[email protected]:~/stu/Development_util_ok/yaffs2/utils$ mkyaffs2image
mkyaffs2image: image building tool for YAFFS2 built Nov 14 2018
usage: mkyaffs2image dir image_file [convert]
dir the directory tree to be converted
image_file the output file to hold the image
'convert' produce a big-endian image from a little-endian machine
製作映像,在當前目錄生成yaffs2
檔案
mkyaffs2image first_fs first_fs.yaffs2
使用dnw
燒入,啟動後輸入回車然後有提示,這個和我們設定的指令碼型別為askfirst
,是一致的,等待回車後執行
Please press Enter to activate this console. 等待輸入回車
starting pid 763, tty '/dev/console': 'bin/sh'