當前位置:首頁 » 操作系統 » linux根文件系統的製作

linux根文件系統的製作

發布時間: 2022-03-09 13:53:22

㈠ 什麼時候要重新製作linux的根文件系統謝謝

首先要理解什麼是根文件系統,如果你不是做應用開發如嵌入式等等話,就不需要修改。

1. 根文件系統

文件系統是包括在一個磁碟(包括光碟、軟盤、閃盤及其它存儲設備)或分區的目錄結構;一個可應用的磁碟設備可以包含一個或多個文件系統;如果您想進入一個文件系統,首先您要做的是掛載(mount)文件系統;為了掛載(mount)文件系統,您必須指定一個掛載點。

註:對於我們應用開發來說,購買開發板的時候,廠家會提供好現成的根文件系統和BootLoader等,如果需要,我們可以改變其中的命令而無需從頭開始製作一個新的根文件系統。不過這兒的製作過程可以讓我們更深一點理解Linux的文件系統。

2.主要的根文件系統

* Linux 中,rootfs 是必不可少的。PC 上主要實現有 ramdisk 和直接掛載 HD(Harddisk,硬碟) 上的根文件系統;嵌入式中一般不從 HD 啟動,而是從 Flash 啟動,最簡單的方法是將 rootfs load 到 RAM 的 RAMDisk,稍復雜的就是 直接從Flash 讀取的 Cramfs,更復雜的是在 Flash 上分區,並構建 JFFS2 等文件系統。

* RAMDisk 將製作好的 rootfs 壓縮後寫入 Flash,啟動的時候由 Bootloader load 到RAM,解壓縮,然後掛載到 /。這種方法操作簡單,但是在 RAM 中的文件系統不是壓縮的,因此需要佔用許多嵌入式系統中稀有資源 RAM。

ramdisk 就是用內存空間來模擬出硬碟分區,ramdisk通常使用磁碟文件系統的壓縮存放在flash中,在系統初始化時,解壓縮到SDRAM並掛載根文件系統, 在linux系統中,ramdisk有二種,一種就是可以格式化並載入,在linux內核2.0/2.2就已經支持,其不足之處是大小固定;另一種是 2.4的內核才支持,通過,ramfs來實現,他不能被格式化,但用起來方便,其大小隨所需要的空間增加或減少,是目前linux常用的ramdisk技術.

* initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大簡化了 Linux 的啟動過程,附合 Linux 的基本哲學:Keep it simple, stupid(KISS). 不過cpio-initrd 作為新的格式,還沒有經過廣泛測試,嵌入式 Linux 中主要採用的還是 image-initrd。

* Cramfs 是 Linus 寫的很簡單的文件系統,有很好的壓縮綠,也可以直接從 Flash 上運行,不須 load 到 RAM 中,因此節約了 RAM。但是 Cramfs 是只讀的,對於需要運行時修改的目錄(如: /etc, /var, /tmp)多有不便,因此,一般將這些目錄做成ramfs 等可寫的 fs。

* SquashFS 是對 Cramfs 的增強。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有優勢。不過,據開發者介紹,在性能上可能不如 Cramfs。這也是一種新方法,在嵌入式系統採用之前,需要經過更多的測試。

3.Ramdisk製作

RAMDisk的製作方法如下:

(1) 在PC機的Linux操作系統環境下,生成可以虛擬成塊設備的文件,假設文件名為init.img。

$ dd if=/dev/zero of=init.img bs=4096 count=1024

其中bs*count為塊設備大小(單位:位元組),生成init.img文件以後,還必須對該文件進行格式化。

$ mke2fs –m0 –F init.img

(2) 新建一個文件夾ram,並將init.img掛接到ram目錄。

$ mkdir ram

$ mount init.img ram/ -o loop

這時,讀寫ram目錄,等效於讀寫init.img文件。用戶可以將根文系統所需的文件寫入到ram目錄中。往ram目錄寫完文件以後,還需要使用umount ram命令卸載init.img,才能將已寫入的文件保存到init.img中。

(3)添加完畢,需要umount ram

4. Cramfs製作

CramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任職時,所參與開發的文件系統。它是針對Linux內核2.4之後的版本所設計的一種新型只讀文件系統,採用了 zlib 壓縮,壓縮比一般可以達到1:2,但仍可以作到高效的隨機讀取,Linux系統中,通常把不需要經常修改的目錄壓縮存放,並在系統引導的時候再將壓縮文件解開。因為Cramfs不會影響系統的讀取文件的速度,而且是一個高度壓縮的文件系統。因此非常廣泛應用於嵌入式系統中。

在嵌入式的環境之下,內存和外存資源都需要節約使用。如果使用RAMDISK方式來使用文件系統,那麼在系統運行之後,首先要把Flash上的映像文件解壓縮到內存中,構造起RAMDISK環境,才可以開始運行程序。但是它也有很致命的弱點。在正常情況下,同樣的代碼不僅在Flash中占據了空間(以壓縮後的形式存在),而且還在內存中佔用了更大的空間(以解壓縮之後的形式存在),這違背了嵌入式環境下盡量節省資源的要求。

使用CramFS文件系統就是一種解決這個問題的方式。CramFS是一個壓縮格式的文件系統,它並不需要一次性地將文件系統中的所有內容都解壓縮到內存之中,而只是在系統需要訪問某個位置的數據的時候,馬上計算出該數據在CramFS中的位置,將它實時地解壓縮到內存之中,然後通過對內存的訪問來獲取文件系統中需要讀取的數據。CramFS中的解壓縮以及解壓縮之後的內存中數據存放位置都是由CramFS文件系統本身進行維護的,用戶並不需要了解具體的實現過程,因此這種方式增強了透明度,對開發人員來說,既方便,又節省了存儲空間。

但是Cramfs也有其缺點:延遲、小於16MB、不支持寫,只支持PAGE_CREATE_SIZE=4096的內核。

製作的命令:(root文件夾中存放著文件系統)

#mkcramfs root cramfs.img

5. 其他根文件系統的製作

製作yaffs文件系統: mkyaffsimage myroots myroots.img

製作squashfs: mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments –noI

6. BusyBox編譯以及移植(根文件系統內命令的製作移植)

建立目標板空根目錄文件夾及根目錄下的文件夾:

[root@190 friendly-arm]# mkdir myroots

[root@190 friendly-arm]#pwd

/friendly-arm/myroots

[root@190 friendly-arm]#cd myroots

[root@190 myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var

[root@190 myroots]# mkdir etc/init.d

進入etc/init.d目錄下,建立一個腳本文件,並命名為rcS,用gedit打開,添加如下內容:

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

#

# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.

#

trap ":" INT QUIT TSTP

創建 dev 中的節點

如果使用「linux 2.6.xx」的內核,應該事先創建節點「console」、「null」。否則在系統啟動時內容會提示以下錯誤:

Warning: unable to open an initial console.Kernel panic - not syncing: Attempted to kill init!

創建節點的命令如下:

# mknod dev/console c 5 1# mknod dev/null c 1 3

移植Busybox:

進入到壓縮文件存放的目錄下,並解壓。然後進入解壓後的busybox目錄文件夾,隨後配置busybox 。

[root@190 busybox-1.2.0]# make menuconfig

由於每個版本的配置選項組織有所不同。不管怎樣,我們注意以下選項就行了:

1) Support for devfs

2) Build BusyBox as a static binary ( no shared libs ) //將busybox編譯成靜態鏈接

3) Do you want to build busybox with a Cross Compile?

(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix //指定交叉編譯器

4) init

5) Support reading an inittab file //支持init讀取/etc/inittab 配置文件

6) (X) ash選中ash //建立的rcS腳本才能執行

7)ash

8)cp cat ls mkdir mv //可執行命令工具的選擇,自己看著辦吧,需要用到的就選上

9) mount

10) umount

11) Support loopback mounts

12) Support for the old /etc/mtab file

13) insmod

14) Support version 2.2.x to 2.4.x Linux kernels

15) Support version 2.6.x Linux kernels

16) vi

17)don』t use user

以上內容必須選上,其他可按默認值;如果要支持其他功能,如網路支持等,可按需選擇,英語不是很爛的話,這些都沒有問題。

配置好之後,保存退出。然後對其編譯和安裝到剛才建立的根文件系統目錄下:

[root@190 busybox-1.2.0] make TARGET_ARCH=arm CROSS=arm-linux- \ PREFIX=/friendly-arm/myroots/ all install

安裝好之後,將相應的二進制文件拷貝到根文件系統相應的目錄下:

* 拷貝一些管理員控製程序到/sbin目錄下,最重要的就是要包含一個init命令;

* 拷貝應用程序運行時所需要的庫到/lib,庫文件可以從PC機上的交叉編譯工具安裝目錄下拷貝,如libc-2.2.2.so、libcryt- 2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,為部分相應庫建立快捷方式,提供一些應用程序按快捷方式名稱調用。

㈡ 怎樣製作嵌入式linux根文件系統

簡單的說:先配置文件系統的基本目錄,包含/bin /sbin /etc /usr /tmp /root 等基本目錄,把應用程序放到這些目錄中,再用mkcamfs等工具來打包文件系統即可。細節上的話要說的就多了

㈢ 有了linux裁剪的內核和根文件系統,如何來製作一張安裝盤

這個不是幾句話就能說清楚的,建議樓主去看看livecd的原理

㈣ 如何製作Linux根文件系統

根文件系統一直以來都是所有類Unix操作系統的一個重要組成部分,也可以認為是嵌入式Linux系統區別於其他一些傳統嵌入式操作系統的重要特徵,它給Linux帶來了許多強大和靈活的功能,同時也帶來了一些復雜性。我們需要清楚的了解根文件系統的基本結構,以及細心的選擇所需要的系統庫、內核模塊和應用程序等,並配置好各種初始化腳本文件,以及選擇合適的文件系統類型並把它放到實際的存儲設備的合適位置。
Linux的根文件系統以樹型結構組織,包含內核和系統管理所需要的各種文件和程序,一般說來根目錄」/」下的頂層目錄都有一些比較固定命名和用途。
下面列出了一個Linux根文件系統中的比較常見的目錄結構:
/bin 存放二進制可執行命令的目錄
該目錄下存放所有用戶都可以使用的、基本的命令,這些命令在掛接其它文件系統之前就可以使用,所以/bin目錄必須和根文件系統在同一個分區中。
/bin目錄下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,m knod,[,test等「[」命令其實就是test命令,我們在利用Busybox製作根文件系統時,在生成的bin目錄下,可以看到一些可執行的文件,也就是可用的一些命令。
/dev 存放設備文件的目錄
該目錄下存放的是設備文件,設備文件是Linux中特有的文件類型,在Linux系統下,以文件的方式訪問各種設備,即通過讀寫某個設備文件操作某個具體硬體。比如通過"dev/ttySAC0"文件可以操作串口0,通過"/dev/mtdblock1"可以訪問MTD設備的第2個分區。
/etc 存放系統管理和配置文件的目錄
該目錄下存放著各種配置文件,對於PC上的Linux系統,/etc目錄下的文件和目錄非常多,這些目錄文件是可選的,它們依賴於系統中所擁有的應用程序,依賴於這些程序是否需要配置文件。在嵌入式系統中,這些內容可以大為精減。
/home 用戶主目錄,比如用戶user的主目錄就是/home/user,可以用~user表示
用戶目錄,它是可選的,對於每個普通用戶,在/home目錄下都有一個以用戶名命名的子目錄,裡面存放用戶相關的配置文件。
/lib 存放動態鏈接共享庫的目錄
該目錄下存放共享庫和可載入(驅動程序),共享庫用於啟動系統。運行根文件系統中的可執行程序,比如:/bin /sbin 目錄下的程序。
/sbin存放系統管理員使用的管理程序的目錄
該目錄下存放系統命令,即只有管理員能夠使用的命令,系統命令還可以存放在/usr/sbin,/usr/local/sbin目錄下,/sbin目錄中存放的是基 本的系統命令,它們用於啟動系統,修復系統等,與/bin目錄相似,在掛接其他文件系統之前就可以使用/sbin,所以/sbin目錄必須和根文件系統在同一個分區中。
/sbin目錄下常用的命令有:shutdown reboot fdisk fsck等,本地用戶自己安裝的系統命令放在/usr/local/sbin目錄下。

/tmp 公用的臨時文件存儲點
用於存放臨時文件,通常是空目錄,一些需要生成臨時文件的程序用到的/tmp目錄下,所以/tmp目錄必須存在並可以訪問。
/root 系統管理員的主目錄
根用戶的目錄,與此對應,普通用戶的目錄是/home下的某個子目錄。
/mnt 系統提供這個目錄是讓用戶臨時掛載其他的文件系統。
用於臨時掛載某個文件系統的掛接點,通常是空目錄,也可以在裡面創建一引起空的子目錄,比如/mnt/cdram /mnt/hda1 。用來臨時掛載光碟、硬碟。
/proc 虛擬文件系統,可直接訪問這個目錄來獲取系統信息。
這是一個空目錄,常作為proc文件系統的掛接點,proc文件系統是個虛擬的文件系統,它沒有實際的存儲設備,裡面的目錄,文件都是由內核臨時生成的,用來表示系統的運行狀態,也可以操作其中的文件控制系統。
/usr 最龐大的目錄,要用到的應用程序和文件幾乎都在這個目錄。
/usr目錄的內容可以存在另一個分區中,在系統啟動後再掛接到根文件系統中的/usr目錄下。裡面存放的是共享、只讀的程序和數據,這表明/usr目錄下的內容可以在多個主機間共享,這些主要也符合FHS標準的。/usr中的文件應該是只讀的,其他主機相關的,可變的文件應該保存在其他目錄下,比如/var。/usr目錄在嵌入式中可以精減。
/var 某些大文件的溢出區
與/usr目錄相反,/var目錄中存放可變的數據,比如spool目錄(mail,news),log文件,臨時文件。
---------------------------------------------------------------------
一、移植環境:
1、 Ubuntu 10.10發行版
2、 u-boot.bin
3、 目標機:FS_S5PC100平台
4、 交叉編譯器 arm-cortex_a8-linux-gnueabi-gcc
---------------------------------------------------------------------
二、移植步驟
1、 源碼下載
我們選擇的版本是busybox-1.17.3.tar.bz2下載路徑為:
http://busybox.net/downloads/
2、 解壓源碼
$ tar xvf busybox-1.17.3.tar.bz2
3、 進入源碼目錄
$ cd busybox-1.17.3
4、 配置源碼
$ make menuconfig

Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
[ ] Force NOMMU build
[ ] Build with Large File Support (for accessing files > 2 GB)
(arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix
() Additional CFLAGS

5、 編譯
$ make
6、 安裝
busybox默認安裝路徑為源碼目錄下的_install
$ make install
7、 進入安裝目錄下
$ cd _install
$ ls
bin linuxrc sbin usr
8、 創建其他需要的目錄
$ mkdir dev etc mnt proc var tmp sys root
9、 添加庫
在_install目錄下創建一個lib文件夾,將工具鏈中的庫拷貝到lib目錄下
$ mkdir lib
$ cp /home/linux/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib/* ./lib/
刪除lib下的所有目錄、.o文件和.a文件,對庫進行瘦身以減小文件系統的大小
$ rm *.o *.a
$ arm-cortex_a8-linux-gnueabi-strip lib/*
10、 添加系統啟動文件
在etc下添加文件inittab
$ vim /etc/inittab
文件內容如下:

#this is run first except when booting in single-user mode.
:: sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot

在etc下添加文件fstab
$ vim /etc/fstab
文件內容如下:
#device mount-point type options mp fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
這里我們掛在的文件系統有三個proc、sysfs和tmpfs,在內核中proc和sysfs默認都支持,而tmpfs是沒有支持的,我們需要添加tmpfs的支持
修改內核配置:
$ make menuconfigFile systems --->
Pseudo filesystems --->
[*] Virtual memory file system support (former shm fs)
[*] Tmpfs POSIX Access Control Lists
重新編譯內核
$ make zImage
在etc下創建init.d目錄,並在init.d下創建rcS文件
$ mkdir /etc/init.d -p
$ vim /etc/init.d/rcS
rcS文件內容為:
#!/bin/sh
# This is the first script called by init process
/bin/mount -a
為rcS添加可執行許可權:
$ chmod +x init.d/rcS
在etc下添加profile文件
$ vim /etc/profile
文件內容為:

#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
#export PS1="\[\u@\h \W\]\$ "
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH

11、 設備文件創建
根文件系統中有一個設備節點是必須的,在dev下創建console節點
$ mknod dev/console c 5 1
重要:新製作的文件系統尺寸若超出8M,刪除不需要的庫文件。

㈤ 有了linux裁剪的內核和根文件系統如何來製作linux安裝盤,還需要什麼謝謝了

能這么問的,估計對Linux也了解不到多少……

光碟不能隨機定址,所以最好將根文件系統做成一個文件(在系統啟動時掛載為ROOT)。這時還需要另外一個虛擬內存檔文件(initrd),其中的啟動腳本可以參考現成的Linux安裝盤,需要注意的就是最後要將光碟上的一個文件掛載為ROOT,而不是把光碟掛載為ROOT,根文件系統採用的文件系統格式模塊必須編譯進內核或放進initrd文件。

最後一步就是在光碟(或光碟映像)上部署引導程序了。

想做這個,C編程不是太重要(能會更好),腳本能力一定要夠強!

㈥ Linux 根文件系統製作

用grub 4 dos裡面的grldr引導其實是最方便的
把grldr直接放到C:
在windows的引導菜單里加入C:\grldr="GRUB"
重啟進入grub就可以用來引導linux了

不過要有一定的基礎

至於安裝時要不要解壓ISO這個要看用的是什麼LINUX了
susu是要解壓的
RH類, den類就不用了

你用的那個是怎樣的就不知道了, 不過要引導linux的ISO(安裝文件),當然要用引導器解釋磁碟的方法輸入地址啦

在grub里就是 hda* hdb*
進入內核就是 /dev/hda* /dev/hdb* /dev/sda*等等類似的地址啦

不過不知道你看不看得明白上面的東東呢

㈦ 我有了自己裁剪的linux內核和根文件系統,如何製作硬碟安裝的linux系統

找個安裝程序封裝……不然自己寫……

熱點內容
安卓手機怎麼注冊蘋果雲 發布:2024-11-15 01:05:00 瀏覽:407
資料庫設計模板 發布:2024-11-15 00:47:25 瀏覽:825
編程的悟性 發布:2024-11-15 00:47:24 瀏覽:733
主流可編譯語言 發布:2024-11-15 00:42:23 瀏覽:729
excel緩存清除 發布:2024-11-15 00:39:53 瀏覽:486
機械鍵盤可編程 發布:2024-11-15 00:39:09 瀏覽:912
php判斷字元開頭 發布:2024-11-15 00:35:33 瀏覽:507
網易蘋果游戲怎麼轉移到安卓 發布:2024-11-15 00:07:52 瀏覽:270
win7php環境搭建 發布:2024-11-15 00:06:55 瀏覽:17
erpjava 發布:2024-11-14 23:52:23 瀏覽:253