當前位置:首頁 » 編程軟體 » 編譯rootfs

編譯rootfs

發布時間: 2022-07-25 06:11:56

A. rootfs 生成鏡像 哪些可以刪除

以靜態方式編譯, 即生成的 busybox 不需要共享庫的...也可自己寫這些文件。7、把rootfs做成鏡像 #mkcramfs...文件,把二進制文件中的包含的符號表和調試信息刪除...

B. linux用戶程序如何編譯到文件系統里去。

這個就類似於自己製作Linux發行版的rootfs了。不同系統不同環境製作方法是不同的。比如我有塊板子我是用yocto自己生成rootfs的,隨意加入任何東西,當然不只是簡單改makefile。

最省事的方法是把已經做好的rootfs解包出來,把文件復制進去,然後再打包就完事了。

C. 請教linux啟動rootfs掛載問題

1。linux啟動時,經過一系列初始化之後,需要mount 根文件系統,為最後運行init進程等做准備,mount 根文件系統有這么幾種方式:

1)文件系統已經存在於硬碟(或者類似的設備)的某個分區上了,kernel根據啟動的命令行參數(root=/dev/xxx),直接進行mount。 這里有一個問題,在root文件系統本身還不存在的情況下,kernel如 何根據/dev/xxx來找到對應的設備呢?注意:根文件系統和其他文件系統的mount方式是不一樣的,kernel通過直接解析設備的名稱來獲得設備的主、從設備號,然後就可以訪問對應的設備驅動 了。所以在init/main.c中有很長一串的root_dev_names(如hda,hdab,sda,sdb,nfs,ram,mtdblock……),通過這個表就可以根據設備名稱得到設備號。注意,bootloader或內核中設定的啟動參數(root=/dev/xxx)只是一個代號,實際的根文件系統中不一定存在這個設備文件!

2)從軟碟機等比較慢的設備上裝載根文件系統,如果kernel支持ramdisk,在裝載root文件系統時,內核判斷到需要從軟盤(fdx)mount(root=/dev/fd0),就會自動把文件系統映象復制到ramdisk,一般對應設備ram0,然後在ram0上mount 根文件系統。 從源碼看,如果kernel編譯時沒有支持ramdisk,而啟動參數又是root=/dev/fd0, 系統將直接在軟盤上mount,除了速度比較慢,理論上是可行的(沒試過,不知道是不是這樣?)

3)啟動時用到initrd來mount根文件系統。注意理解ramdisk和initrd這兩個概念,其實ramdisk只是在ram上實現的塊設備,類似與硬碟操作,但有更快的讀寫速度,它可以在系統運行的任何時候使用,而不僅僅是用於啟動;initrd(boot loader initialized RAM disk)可以說是啟動過程中用到的一種機制,具體的實現過程也使用ramdisk技術。就是在裝載linux之前,bootloader可以把一個比較小的根文件系統的映象裝載在內存的某個指定位置,姑且把這段內存稱為initrd(這里是initrd所佔的內存,不是ramdisk,注意區別),然後bootloader通過傳遞參數的方式告訴內核initrd的起始地址和大小(也可以把這些參數編譯在內核中),在啟動階段就可以暫時的用initrd來mount根文件系統。initrd的最初的目的是為了把kernel的啟動分成兩個階段:在kernel中保留最少最基本的啟動代碼,然後把對各種各樣硬體設備的支持以模塊的方式放在initrd中,這樣就在啟動過程中可以從initrd所mount的根文件系統中裝載需要的模塊。這樣的一個好處就是在保持kernel不變的情況下,通過修改initrd中的內容就可以靈活的支持不同的硬體。在啟動完成的最後階段,根文件系統可以重新mount到其他設備上,但是也可以不再 重新mount(很多嵌入式系統就是這樣)。 initrd的具體實現過程是這樣的:bootloader把根文件系統映象裝載到內存指定位置,把相關參數傳遞給內核,內核啟動時把initrd中的內容復制到ramdisk中(ram0),把initrd佔用的內存釋放掉,在ram0上mount根文件系統。從這個過程可以看出,內核需要對同時對ramdisk和initrd的支持(這種需要都編入內核,不能作為模塊)。

2。嵌入式系統根文件系統的一種實現方法:對於kernel和根文件系統都存儲在flash中的系統,一般可以利用linux啟動的initrd的機制。具體的過程前面已經比較清楚了,還有一點就是在啟動參數中傳遞root=/dev/ram0,這樣使得用initrd進行mount的根文件系統不再切換,因為這個時候實際的設備就是ram0。還有就是initrd的起始地址參數為虛擬地址,需要和bootloader中用的物理地址對應。
望採納

D. rootfs 是編譯到內核內還是另外載入

rootfs 是編譯到內核內還是另外載入
linux內核中Kconfig文檔的作用
2.6內核的源碼樹目錄下一般都會有兩個文文:Kconfig和Makefile。分布在各目錄下的Kconfig構成了一個分布式的內核配置資料庫,每個Kconfig分別描述了所屬目錄源文件相關的內核配置菜單。在內核配置make menuconfig(或xconfig等)時,從Kconfig中讀出配置菜單,用戶配置完後保存到.config(在頂層目錄下生成)中。在內核編譯時,主Makefile調用這個.config,就知道了用戶對內核的配置情況。
上面的內容說明:Kconfig就是對應著內核的配置菜單。假如要想添加新的驅動到內核的源碼中,可以通過修改Kconfig來增加對我們驅動的配置菜單,這樣就有途徑選擇我們的驅動,假如想使這個驅動被編譯,還要修改該驅動所在目錄下的Makefile。

E. 如何不通過內核命令行rootfstype指定根文件系統類型

選定 busybox-1.9.2.tar.bz2 這個版本, 以靜態方式編譯, 即生成的 busybox 不需要共享庫的支持就能運行。這樣做我們就不需要布署程序庫了。缺點是自己寫的 arm-linux 程序在這個根文件系統中是不能運行的,因為缺少共享程序庫的支持。不過不用擔...

F. 自己編譯的linux內核以及rootfs,製成可引導iso後.在虛擬機上啟動成功,但是網卡不能用.

虛擬機網卡不能用你貼主機的有什麼用。倆網卡沒關系的。
你去看看虛擬機的網卡是什麼型號吧。啟動進系統後 lspci 應該有顯示的。

還有,如果驅動你編譯成了 mole 。你還要在 rootfs 上存放 moles 目錄以及 udev 或者 mdev 程序,不然內核沒地方找這個驅動去。

G. 64位UBUNTU 下 如何用GCC 編譯出32位程序 求前輩指點

目測是32位的搜索路徑下沒有sys/cdefs.h
一般64位系統最好不要安裝32位庫的-dev,經常有沖突,強行安裝會破壞64位環境,頭文件並不像共享庫分得那麼完美。
我覺得比較好的做法是,重新把某一個文件夾當成rootfs,在裡面安裝各種32位的庫和庫-dev,然後給gcc傳遞參數"--sysroot=路徑"就可以讓gcc重新選取那個文件夾為rootfs,而不再認為/為rootfs。其實這樣就變成交叉編譯了。也可以在這個rootfs中安裝32位的必要軟體包如bash,gcc,coreutils等等,然後chroot進去就變成host編譯了。其實有個比較簡單的方法,就是虛擬機下安一個32位的ubuntu,然後裝好各種軟體包,然後直接對/打包,再拿出來解壓就是rootfs了,後面最多就是缺啥安啥,工作量比較小。當然如果你不在意編譯速度,直接虛擬機下編最簡單

H. initramfs中用什麼編輯文件

工作過程簡述
在2.6kernel啟動時,它把rootfs作為它的第一個文件系統掛載(注意:這里的rootfs是真名!!!不是root filesystem的縮寫)。rootfs是一個特殊的tmpfs,這個不能被刪除或者是unmounted。很多使用2.6內核的系統通常都是掛載rootfs後什麼都不做,然後啟動另一個文件系統作為root filesystem。但是,這個不能掩蓋rootfs存在的事實,你可以「cat /proc/mounts」 來查看,第一個掛載的肯定是rootfs。
rootfs被掛載後,kernel立馬就解壓了那個用gzip壓縮的CPIO歸檔文件到rootfs。每個2.6的內核都會執行這一步,但是默認那個壓縮檔是空的,所以也就沒有往rootfs內添加任何東西。接著kernel會嘗試在rootfs去找尋/init,一旦找到init並執行,kernel也就完成了啟動工作,然後便是剛剛執行的init程序接管了接下來的工作。如果kernel沒法調用"/init"程序,可能就會回過頭去,按照便準的做法去解析參數「root=」,試圖找到另一個filesystem然後掛載它。
這里的使用initramfs是指,提供一個/init程序給rootfs使用,我們可以通過兩種途徑實現:使用編譯進內核的cpio.gz檔案,或者是一個獨立的cpio.gz檔案。以前的initrd就是編譯一個獨立的檔案,很多使用initramfs的方式也是給它提供一個獨立的檔案。

開工啦!
為了不看起來那麼乏味,我們嘗試通過一個看的著的例子來展示這個過程。
唔,我們還是把「hello world」作為第一個要放到initramfs中去的程序。事實上,rootfs和其它的root filesystem並沒有什麼區別,如果你喜歡,你可以放/etc和/usr和/tmp和。。。然後還可以mount /proc 和/sysfs過去。但是這里我們只需要放/init過去。程序的最後我們使用sleeping而不是exiting,這主要是考慮如果PID 1的程序退出,kernel會panic,這會干擾我們的視線

熱點內容
勞斯來斯最高配置什麼價 發布:2025-02-06 04:41:13 瀏覽:235
軟體文件夾安裝包 發布:2025-02-06 04:38:53 瀏覽:942
h6二代有哪些隱藏配置 發布:2025-02-06 04:11:09 瀏覽:606
c語言中的void是什麼意思 發布:2025-02-06 04:05:26 瀏覽:233
加密狗是啥 發布:2025-02-06 03:48:03 瀏覽:556
phpcopy文件 發布:2025-02-06 03:41:26 瀏覽:412
系統配置頁面怎麼設置 發布:2025-02-06 03:36:34 瀏覽:699
家庭電腦搭建流媒體伺服器 發布:2025-02-06 03:19:02 瀏覽:346
matlab稀疏矩陣存儲 發布:2025-02-06 03:07:54 瀏覽:840
國際服2b2t伺服器地址 發布:2025-02-06 03:06:28 瀏覽:392