Linux核心移植 part4:關於initrd和initramfs
一、initrd
ram disk中的file system叫做initrd,全名叫做initial ramdisk。
注意: 當下用initrams多
如何建立initial ramisk
host > dd if=/dev/zero of=/dev/ram0 bs=1k count=<count>
host > mke2fs -vm0 /dev/ram0 <count>
host > tune2fs -c 0 /dev/ram0
host > dd if=/dev/ram0 bs=1k count=<count> | gzip -v9 > ramdisk.gz
這段程式碼就建立了大小為count的ramdisk
建立完之後還要新增哪些東西
還要新增一些必要的檔案讓他工作,可能是庫,應用程式等。例如busybox。
host $ mkdir mnt
host $ gunzip ramdisk.gz
host $ mount -o loop ramdisk mnt/
host $ ... copy stuff you want to have in ramdisk to mnt...
host $ umount mnt
host $ gzip -v9 ramdisk
核心如何支援initial ramdisk
#
# General setup
#
...
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
...
#
# UBI - Unsorted block images
#
...
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
...
告訴uboot怎麼找到她
UBOOT # tftp 0x87000000 ramdisk.gz
UBOOT # erase 0x2200000 +0x<filesize>
UBOOT # cp.b 0x87000000 0x2200000 0x<filesize>
UBOOT # setenv bootargs ... root=/dev/ram0 rw initrd=0x87000000,8M
UBOOT # setenv bootcmd cp.b 0x2200000 0x87000000 0x<filesize>; bootm
UBOOT # saveenv
注意: ramdisk 中要有ram0節點
brw-rw---- 1 root disk 1, 0 Sep 11 1999 /dev/ram0
最後啟動核心
二、initramfs
initramfs相當於把initrd放進了核心,通過cpio(這是一個檔案處理工具)實現。
如何建立
比initrd簡單多了
host > mkdir target_fs
host > ... copy stuff you want to have in initramfs to target_fs...
注意:
1. initramfs中的cpio系統不能處理hard link,用soft link
2. 頂層必須有個init程式,這是kernel要用的,可以這麼做
/init -> /bin/busybox
接著
host > cd target_fs
host > find . | cpio -H newc -o > ../target_fs.cpio
核心支援
#
# General setup
#
...
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="<path_to>/target_fs>"
...
#
# UBI - Unsorted block images
#
...
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
然後執行make uImage的時候就被包含到kernel中了。
uboot支援
因為已經在kernel中了,不需要像initrd一樣通過引數 root=/xxx rw initrd=xxx來告訴uboot了
三、比較
- initrd方式中kernel和initial file system為獨立的部分,互不影響,下載的時候映象也小。
- 建立修改initramfs比initrd容易。
- 在燒寫的時候,顯然一個映象更容易管理。
參考文獻
相關推薦
Linux核心移植 part4:關於initrd和initramfs
一、initrd ram disk中的file system叫做initrd,全名叫做initial ramdisk。 注意: 當下用initrams多 如何建立initial ramisk host > dd if=/dev/ze
Linux核心移植 part2:uboot 裝置樹--基本概念和原始碼介紹
arm uboot的裝置樹原始檔位於arch/arm/dts/目錄下,網路上有很多介紹Linux裝置樹概念的文章,這裡以dts相關的API為切入點,如果都懂了,裝置樹的東西就迎刃而解了。本篇文章首先記錄一些基本知識,下一篇進行原始碼分析。 一、裝置樹檔案基
Linux核心移植 part2:uboot裝置樹--生成過程分析
本文從裝置樹軟體控制相關程式碼進行分析,進而理清裝置樹相關的知識。 先放一個裝置樹在記憶體中的結構圖: 分析來源為$(tree)/lib/fdtdec_test.c 一、資料結構 1.1 檔案頭 每個dtb都包含如下結構的檔案頭,用來表示裝
從讀手冊開始讓zynq板卡跑起linux(二)----利用initrd和initramfs分別製作根檔案系統
1.initrd 與 initramfs的區別 Linux核心在初始化之後會執行init程序,而init程序會掛載我們的根檔案系統,但由於init程式也是在根檔案系統上的,所以這就有了悖論。Linux採用兩步走的方法來解決這個問題。Linux2.6版以前的方法是:除了核心v
Linux核心移植 part3:Exynos4412核心編譯
為了在exynos 4412平臺上執行系統,選擇了linux來測試,因為只是用來測試的,所以並沒有完整功能的移植,只要能啟動就可以了。兼顧方便和先進性,選擇了4.1這個長期支援版本。從清華的源上下載速度比較快。 因為選擇的是uboot啟動,執行 $ ma
Linux核心移植 part3:串列埠驅動
每日一樂:小美在作文簿裡寫上長大後的願望:一、我希望能有一個可愛的孩子;二、我還希望能有一個愛我的丈夫。結果,發現老師寫了一句評語:“請注意先後順序。” 介紹Linux kernel 4.1對exynos 4412串列埠的支援。 其實這部分工作已經過
Linux核心移植 part1:eMMC啟動
時間,就象海棉裡的水,只要願擠,總還是有的。 —— 魯迅 從建立部落格到現在陸陸續續有好幾個童鞋來找我要程式碼,其中有個問題經常提到:支不支援從emmc啟動。但是我移植uboot和kernel只是為了探究我自己感興趣的東東,所以沒有去關注emmc啟
讀書筆記《Linux核心完全剖析:基於0.12核心》——第三章 核心程式語言和環境
3.1 as86彙編器 linux 0.1x系統中使用了兩種彙編器(Assembler)。一種是能產生16位程式碼的as86彙編器,配套ld86連結器;另一種是GNU的彙編器gas(as),使用GNU ld連結器。 編譯器和連結器的原始碼可以從FTP伺服器ftp
Linux核心移植和根檔案系統製作(詳細步驟精講)
start_kernel是所有 Linux 平臺進入系統核心初始化後的入口函式,它主要完成剩餘的與硬體平臺相關的初始化工作,在進行一系列與核心相關的初始化後,呼叫第一個使用者程序-init 程序並等待使用者程序的執行,這樣整個 Linux 核心便啟動完畢。該函式所做的具體工作有:呼叫 setup_arch
動態替換Linux核心函數的原理和實現
c函數 路徑 pla ges sta images 語句 堆棧 mit 轉載:https://www.ibm.com/developerworks/cn/linux/l-knldebug/ 動態替換Linux核心函數的原理和實現 在調試Linux核心模塊時,有時需要
Linux實戰第二篇:Centos6和Centos7密碼破解實戰
root恢復個人筆記分享(在線閱讀):http://note.youdao.com/noteshare?id=744d026219e72c69e606f115bd333ddcPDF版本下載請在附近中下載本文出自 “人才雞雞” 博客,請務必保留此出處http://6575793.blog.51cto.com/6
Linux Kernel系列一:開篇和Kernel啟動概要
mis misc 跳轉 line global 最終 width lin 通過 前言 最近幾個月將Linux Kernel的大概研究了一下,下面需要進行深入詳細的分析。主要將以S3C2440的一塊開發板為硬件實體。大概包括如下內容: 1 bootloader分析,以uboo
為Linux配置常用源:epel和IUS
IT 配置 arch pda creates erp mmu version 源代碼 CentOS上,除了os類的yum源,還需要配置幾個常用的源:epel、ius。 有很多國內很多鏡像站點都提供了各類倉庫的鏡像站點,個人感覺比較全的是阿裏雲http://mirrors.
linux後臺執行命令:&和nohup詳解
& 當在前臺執行某個作業時,終端被該作業佔據;可以在命令後面加上& 實現後臺執行。例如:sh test.sh & 適合在後臺執行的命令有f i n d、費時的排序及一些s h e l l指令碼。在後臺執行作業時要當心:需要使用者
讀書筆記:LINUX核心完全剖析:基於0.12核心
讀書筆記:LINUX核心完全剖析 IBM PC及其相容機主要使用 獨立編址方式,採用獨立的I/O地址空間對控制裝置中的暫存器進行定址和訪問,IBM PC也部分地使用統一編址。對於使用EISA、PCI等匯流排結構的PC,有64KB的I/O地址空間可供使用。在普通Li
Linux的後臺執行:&和nohup
我們在使用Linux伺服器的時候,一般是使用終端利用SSH協議登入的。當你需要同時進行一些作業,但又不想開啟多個終端的話就需要用到後臺執行。 & sh test.sh & 一些費時的作業可以這樣放在後臺執行,但需要注意的是後臺執行的作業如果有輸出,一樣會輸出
linux核心移植步驟
2016.6.8 經過一個多星期的核心折磨,今天終於可以寫下自己移植核心的一些心得,網上有很多部落格論壇都有談到,但是這些又說的方式有些模糊,這裡我綜合的幾個部落格在重新說下核心替換編譯的步驟、以及如何更新啟動項grub。替換linux的核心一共有兩種方式,第一種方式是下載官方kerne
基於tiny4412的Linux核心移植(支援device tree)(三)
https://www.cnblogs.com/pengdonglin137/p/5146791.html 閱讀目錄(Content) 作者資訊 平臺簡介 注意 一、裝置樹反編譯 二、在u-boot列印資訊 三、開啟Linux核心啟動早期的log 四、在核心自解壓時dump記憶體 五、C
基於tiny4412的Linux核心移植(支援device tree)(二)
https://www.cnblogs.com/pengdonglin137/p/5143516.html 閱讀目錄(Content) 作者資訊 平臺簡介 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] QQ:4
基於tiny4412的Linux核心移植(支援device tree)(一)
https://www.cnblogs.com/pengdonglin137/p/5137941.html 閱讀目錄(Content) 作者資訊 平臺簡介 概述 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] Q