构建linux根文件系统
生活随笔
收集整理的這篇文章主要介紹了
构建linux根文件系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 內核 啟動后回去調用第一個程序init、給用戶提供操作界面的shell程序 、應用程序所依賴的庫文件。這些必須的基本的文件合起來稱為根文件系統,他們存放在一個分區中,Linux系統啟動之后首先掛載這個分區,稱為掛載根文件系統,其他的分區上的所有的目錄、文件的集合,也稱之為文件系統。
- linux系統中沒有C、D、E等盤的概念,linux中以樹狀管理所有的文件目錄,其他的分區掛載在這個目錄上,這個目錄被稱之為掛載點或者安裝點,然后可以通過這個分區來訪問這個分區上的文件了,比如根文件系統被掛載在根目錄’/‘上之后,就可以在’/'看到根目錄下的文件了\
- 在一個分區上存儲文件時需要遵循一定的格式,這種格式稱之為文件系統,比如fat16、ntfs、wxt2、ext3、jffs2、yaffs2等,除了這幾個擁有實實在在的存儲分區的文件系統之外,linux還有幾個虛擬的文件系統類型,比如proc、yaffs等,他們的文件并不存在實際的設備上,而是訪問他們時有linux內核臨時的生成。
- /etc下的文件
export 用來配置NFS文件系統
fstab 用來指明執行"mount -a"時的需要掛載的文件系統
mtab 用來顯示已經加載的文件系統,通常是/proc/mounts的鏈接文件
ftpusers 啟動FTP服務時,用來配置用戶的訪問權限
group 用戶的組文件
inittab init進程的配置文件
ld.so.conf 其它共享庫的路徑
passed 密碼文件 - /proc目錄
proc可以為空,linux內核創建的臨時文件,proc文件系統,是一個虛擬的文件系統,他沒有實際的存儲設備,里面的目錄、文件都是內核臨時生成的,用來表示系統的運行狀態,也可已操作其中的文件控制系統。
系統啟動之后使用以下命令掛載proc文件系統(常在/etc/fstab進行設置以自動掛載)
- /tmp用于存放臨時文件,減少系統對flash的操作,所以/tmp目錄必須保證可以訪問到。可使用以下命令記性==進行掛載
linux文件類型
- 普通文件
- 目錄文件
- 字符設備文件
- 塊設備文件
- FIFO
- 套接字
- 連接文件
啟動第一個程序init
文件在linux源碼的init/main.c中
/* This is a non __init function. Force it to be noinline otherwise gcc* makes it inline to init() and it becomes part of init.text section*///若果使用的是 __attribute__(noinline)的話代表的是,返回的出錯將被當成警告處理static int noinline init_post(void) {free_initmem();unlock_kernel();mark_rodata_ro();system_state = SYSTEM_RUNNING;numa_default_policy();if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)printk(KERN_WARNING "Warning: unable to open an initial console.\n");(void) sys_dup(0);(void) sys_dup(0); //因為是linux內核剛剛啟動所以打開的文件描述符是0、1、2,并且使用sys_dup將0、1、2都連接到打開的額console上 //> 之后就能實現將標準輸入標準輸出和標注錯誤輸出重定向到console上。if (ramdisk_execute_command) {run_init_process(ramdisk_execute_command);printk(KERN_WARNING "Failed to execute %s\n",ramdisk_execute_command);}/** We try each of these until one succeeds.** The Bourne shell can be used instead of init if we are* trying to recover a really broken machine.*/// execute_command ==> init = /linuxrc//因為這種函數都是死循環的樣式進行的,所以無論是 /linuxrc還是// /sbin/init 等程序都是只能執行一個if (execute_command) {run_init_process(execute_command);printk(KERN_WARNING "Failed to execute %s. Attempting ""defaults...\n", execute_command);}run_init_process("/sbin/init");run_init_process("/etc/init");run_init_process("/bin/init");run_init_process("/bin/sh");panic("No init found. Try passing init= option to kernel."); }busybox的init程序對應代碼中的init/init.c文件
執行的過程如下:
busybox的inittab配置文件
上圖中的-/bin/sh中的 '-'代表程序是交互的方式啟動,這時就會彈出交互式shell窗口,嵌入式設備中是使用串口
下面是我的開發板上的inittab配置文件
總結
以上是生活随笔為你收集整理的构建linux根文件系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广州市城市智能交通大数据体系研究与实践
- 下一篇: 大数据安全能力实践