1. 程式人生 > >busybox(三)最小根檔案系統

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檔案資訊如下,由此可以看到這兩個檔案是字元裝置

mark

使用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'