1. 程式人生 > >Linux核心移植 part4:關於initrd和initramfs

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了

三、比較

  1. initrd方式中kernel和initial file system為獨立的部分,互不影響,下載的時候映象也小。
  2. 建立修改initramfs比initrd容易。
  3. 在燒寫的時候,顯然一個映象更容易管理。

參考文獻

相關推薦

Linux核心移植 part4關於initrdinitramfs

一、initrd ram disk中的file system叫做initrd,全名叫做initial ramdisk。 注意: 當下用initrams多 如何建立initial ramisk host > dd if=/dev/ze

Linux核心移植 part2uboot 裝置樹--基本概念原始碼介紹

arm uboot的裝置樹原始檔位於arch/arm/dts/目錄下,網路上有很多介紹Linux裝置樹概念的文章,這裡以dts相關的API為切入點,如果都懂了,裝置樹的東西就迎刃而解了。本篇文章首先記錄一些基本知識,下一篇進行原始碼分析。 一、裝置樹檔案基

Linux核心移植 part2uboot裝置樹--生成過程分析

本文從裝置樹軟體控制相關程式碼進行分析,進而理清裝置樹相關的知識。 先放一個裝置樹在記憶體中的結構圖: 分析來源為$(tree)/lib/fdtdec_test.c 一、資料結構 1.1 檔案頭 每個dtb都包含如下結構的檔案頭,用來表示裝

從讀手冊開始讓zynq板卡跑起linux(二)----利用initrdinitramfs分別製作根檔案系統

1.initrd 與 initramfs的區別 Linux核心在初始化之後會執行init程序,而init程序會掛載我們的根檔案系統,但由於init程式也是在根檔案系統上的,所以這就有了悖論。Linux採用兩步走的方法來解決這個問題。Linux2.6版以前的方法是:除了核心v

Linux核心移植 part3Exynos4412核心編譯

為了在exynos 4412平臺上執行系統,選擇了linux來測試,因為只是用來測試的,所以並沒有完整功能的移植,只要能啟動就可以了。兼顧方便和先進性,選擇了4.1這個長期支援版本。從清華的源上下載速度比較快。 因為選擇的是uboot啟動,執行 $ ma

Linux核心移植 part3串列埠驅動

每日一樂:小美在作文簿裡寫上長大後的願望:一、我希望能有一個可愛的孩子;二、我還希望能有一個愛我的丈夫。結果,發現老師寫了一句評語:“請注意先後順序。” 介紹Linux kernel 4.1對exynos 4412串列埠的支援。 其實這部分工作已經過

Linux核心移植 part1eMMC啟動

時間,就象海棉裡的水,只要願擠,總還是有的。 —— 魯迅 從建立部落格到現在陸陸續續有好幾個童鞋來找我要程式碼,其中有個問題經常提到:支不支援從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實戰第二篇Centos6Centos7密碼破解實戰

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配置常用源epelIUS

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