精通initramfs构建

上传人:仙*** 文档编号:106362092 上传时间:2022-06-13 格式:DOC 页数:24 大小:436KB
收藏 版权申诉 举报 下载
精通initramfs构建_第1页
第1页 / 共24页
精通initramfs构建_第2页
第2页 / 共24页
精通initramfs构建_第3页
第3页 / 共24页
资源描述:

《精通initramfs构建》由会员分享,可在线阅读,更多相关《精通initramfs构建(24页珍藏版)》请在装配图网上搜索。

1、图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,1/24http:/odik. com. cn/201006/1277708972216. html2011-1-7图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,#/24http:/v,rw. odi.k. com. cn首页数据库php服务备计oraclehttp:/odik. com. cn/201006/1277708972216. html2011-1-7图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,#/24http:/odik

2、. com. cn/201006/1277708972216. html2011-1-7图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,#/24图像精通 initramfs 构建 stepbystepPub-Date : 2010)6-28 15:09:32http:/odik. com. cn/201006/1277708972216. html2011-1-7图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,#/24http:/odik. com. cn/201006/1277708972216. html2011-1-

3、7图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,#/24術轲* 作各:Adxxunhttp:/odik. com. cn/201006/1277708972216. html2011-1-7图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,#/24http:/odik. com. cn/201006/1277708972216. html2011-1-7图像-粘通initramf s构建stepbystep-c+技术- IT信息网页码,23/24()belloworld、mitiamfs 是什么。426版木的linux内核

4、111 都包含个丿L缩过的cpio格式。的打包文件当内核启动时,会从这个打包文件中导出文件到内核的Z文件系统.然后内核检査rootft中是否包含仃irnt文件.如 厅.图像粘通 initramf:构 W stepbystep.它.作为PID为1的第个进用这个ink进程负责启动系统后续的工件.包折定位、挂撩真正的文件系统设笛(如果仃的话)roocfcq找到ink文件.则内核会按以前版本的方式定位、挂裁根分1“燃肩执ff/sbm/imtfV序完成系统的后续初始化1(1 .这.个爪编过的cpo格式的打包文件就编讦2.6版木的111血内孩时编讦条统总会创建imtrarnft.然后把它与编洋好的. 图像

5、轴通 uutrnmfb 构建 stcpbystcp.内核连接任一起。内核源代码树中的usr 11 就是专门用于构建内核中(rjuutramfc的.妹中的uutramfs.data cpxo.gz文件就。 mitramfs缺省怙况卜S mitramfs是空的 X86架构卜的文件*小是134个字节。x构理第个uutramfc:helloworld从Ci4胡始.学习计算机编用i常啲第 个程中儿乎都是heUoworld-因此我们也构建个加尬单.的hcllowoHd式的imtramfc.以说!基木构建方法。imgmfc的灵魂是init文件(或&叫程序因为它会被内核第一个执行八 我们先写个简臥的mi啾庁.

6、它会住内樓的cowole中打耳helloworldhello, c: include样 include,mtmam(intargc.charaigr)printf(Khelloworld.fronuiutramfsslcep(9999999);arcturnO; 其中的sleep()幣数语句是为避免执行时内核很快打出panic的信息.并JI功能上的需要。接看把helloc編详成静态连接程序gcc-ohel.o_static-static-sliello.c:命令疔中的-S参数农不编洋后的程序不包含调试定位信息,I的是减少W if til來的程序文fl的人小。 再创建个uutramfs的构铿源文

7、件目录image.把hello_st:itic程庁样入这个目录并改名为init.住imagcll录F创建个dev/coaolc的设备文件.否无法在内枝coosolc中输出f;i息:。 mknod-m600dev/consolec51 注总.执行这个命令需娶fjrooi权限.好了.現任可以及咒内核配置参数.进行imtramf:的构建了: 6 general .setup 配? II 號下的 mitramfs.soured怦项卜输入image的路彳名.比如我的路径就是丿home wyk uutramfs-test image o因为我们的nut hl中是ELF格式的.所以内核需要支持ELF的町执行

8、文件.否则品动这个hit程序会失败。在内核的Executablefile.formats ft!置 11 录卜.选择kcmeEupportforELF。binaries,则对使内核支持ELF格式的可执行文件。其他内核配置觀数根据实际需要设置即叭不过.为了减少内核编铎时间可参 章.http: iinuxmanblog ccxlncLcom bloghtm-doth和:接利用了内核的磁盘高速後存机制.所冇的文件的读写数据都会仆存中做高速级存(exhe) 十系统再次使用文件数据时 口 存中读写.以捉。供系统的LO性能。高速缓存中的写入数据会任适半的时候何写到対应的文件系统设笛(如磁盘零)中.这时它的

9、状态就标识为C1CJ 在必要时可.以释放掉这空内存。nimfc没冇对应文件系统设备所以它的数据水远都不会I叫吗何去也就不会标识为clean.因此系统也水远不4 占.用的内存。因jramfsf(接使川了内核(2仃的磁盘岛速级机制所以它的实现代码II當小.也由这个闵虬ramfsi性不能通过内核配盘参! 内核的人然特性。五、rainfs 不足 lamdnk,ramdik足任块内仔区域中创建的块汝备.用存放文件系统。ramdnk(l9容IS址同定的.不能ramfs 样动态iKnmd灶需要内核的动RJT(如m2)來操件英上的数据.而ramfc则是内桟的天然特件.无需额外的驱动程序 ramdisk也彖其他

10、文件系统设备一样.* 和内存中的磁盘鬲速缓存之间复制数据而这种数抑;复制实际不必要的.六、从nmfc派生的文件系统tmpfsromfs的一个粽点是它町能不停的动态增长克到耗尽系统的全部内存.所以只冇wot或授权用门允许便用mmfc;为了解决这个创題.从口 了.tmpfcZ件系统增加了容昴人小的而IL允许把数撫写入交换分区。山于增加这两个待性.所以tmpfs允许普通用八使用。关tmpfs文件系统史E的(h息町以石内核源码111的Documentauon filejfstems. tnipfs.txt文档。综上所述.uutramf出 #ramfs文件系统.金内核丿;动处成麻把它复制到rootfs|

11、,竹为内核初始的浪文件系统,它的任务是挂妙系 文件系统。这就足Hutmmfc的就世今生。(三):busyboxo匕、什么圧busybox。busyboxj称足恨入式Linux屮的瑞1.午刀一小巧、功能齐一全它把许多能用的Linux命令都集成到一个唯-的町执行程序中.只月这一个可执行程序(UPbusybox)加IlLinux内核就可以构住的Linux系统.busybox程洋非常小巧.包含全部命令町执行文件大小也只冇750多K“ bwybox是完全模块化的町以很容易地在编谦时 删除英中包仟的命令tHi busybox的这哎特点.它广泛应用于LrcCD.应总修址盘安装盘系统中我们也足以它为雄础.构建

12、imtramfs八、busybox的配置、編译和安装.去http: burybox net.去卜技垃新的源码.解爪展开。(2) 用。makemenuconfig 命令启训配豐界佃配进.配置busybox的特性.选择耍包仟任butybox的命令 busybox祢为applet) : 也可以用。makedefconfig。命令做決省配置.包介全部的applet.另外两个配置命令是makeallycsconfig-il 大配置。makealluoconfig-iri 小配世它们和makedefconfig命令都可以用來作为门定义配置的初始配说.然麻再用makemcnuconfing命令做定制化配置.

13、为了简单.我们用makedefconfig做缺省配置.(3) 用make ;命令编计busyboxtt件。(4) 用.makcCONHG_PREFIX=msuUo命令安装。如果在命令10略CONFIG_PREF1X妇匸的獗值.则会安装峡省、值丿_gtalll I录卜二CONFIG.PREFIXnf以makcmcnuc 界面中修改.我们用makeCONFIG_PREFIX-* mitramfs-test image命令把butybox安装到lmtrarnft的构建 11求(5) 缺齐配置厂busybox/Jj态进接到ghbe.所以耍把它川到的动态用复制到imgm住的构建|录屮.用ldd命令Abu

14、sybox用到了 文件及相应的文件略径.然麻把它们复制到郴应的I录下即可.我们编讦的butybox需要向lnnge.lib H录下奴制.ld-linux.x) 2Ubc so 6;hbcrypt w.Ulibm.so.6。动态库文件。九、/f unage F创建必要的11录和设备文件。(3)倒Ebusybox配置中.mdev命令需要读取cmdev.conf文件.为J避免出错仁息.我们创建一个空文件。touchetc mdev conf(4)在内核源码IbAF.执行。make。命令.重新编译内核生成新的imtramfc。好了.任QEMU模拟坏境下川动这个新的内核.系统初始化后.会进入SHELL环

15、境。在这个SHELL环境下,试验些常用命令.看 正常运f几I三、canmcccstty。I:一步创建的简Thnux系统任进入SHELL”:境时.会打出下而这一句出併信息:/bin sh canacccssttyjobcontrolloff如然不形响使用.但终究不够完黄。产.牛这个績谋的原冈是我们的SHELLS ft接运行右:内核的console I:的.iftjconsole是不能提供控制终端 terminal)功能的.所以必须衣SHELL运行4 tty设备1:才能消除这个错误。解决创題的办法是使川止规irnt机制.在执fj SHELL询打丿I tty设备。另外.这个简也系统的reboot,

16、halt等命令是不起作用的.也必娥通过uU方式解决.I 四.busybox的缺省inn模式&busyboxJt持irnt功能.十系统没/etcirnttab X件时.它仃 仑缺省的模式.按卜M配置执行:。iisysmit: etc uut.d rcSai askfirst binsho:ctrhltdelusbin, reboot :shutdouTi:/sbin swapoff-3:shutdouTi:/bin uniount-a-r。:restait:/sbinimt从杯卅瀚入读収输入数据.向杯准输出写入输出数抑爲谜项可以折定文件名代枠标淮输入.使用0选顶町以指定文件名代替标准输出,而F选

17、项指定的文件名则根抑CP2操作模式的不同町代特标准输入或标冰输出.把* imtnmfs-tcst image I bA卜的文件打包成imtramfs 执If卜1(11的命令:findcpio-oHnewc|gzip/imagc.cpK gz:命令执行完毕兀 /l:*imtiamfs-testl|录卜就会件:成文件名为imgae.cpio.gz的lmtramEn上.ifticpioiu?令的项折定打包文fl的JL体恪式耍工成untramfs只能川newca格儿 如果使川JL他俗式.内核会打出这样的出谄信息:Unpackmgmitiamfs. kcrnelpoiuc-的copy out操作模式使用

18、i命令行选项折定.例如.我们想把萌一步从内核源码Wusrll下拷贝(rjmitramfs.datacpiogz展开到*/mitramf:-tc5t uutramfs_data 11S衣 F.则使用 F列命令:mkdaiiutramfs rcstimtnimfb_(hgcd uutramfs-test mitramfcdata.!cpioF. J imtramfs_data. cpio gznonb,ohitcfilcnamc命令执行完毕丿二uutramfsdata11卜出现娄个H录和文件用diff命令比较imtramfs_dataimage 11.两者的完全样上面cpio命令的。-no-abs

19、olute filcnamc 选项的作用圧展开文件时.掉文件路径的化把绝対胳径名变为郴对路径名。内核编洋时生成的imgmfc使用了绝対路径选项必须便用.否则imtramE内文件展开到叨11求了如宋你rootJIJf或仃叨II录的得权限那么展开的文杵就仃可能覆孟同名的3文件修攻时间新r原冇文件)那就槽穩了!展开文ftlil.你可能会想先看看打包文件也都冇哪些文件.这时就耍疋燧顶了.例如.我们憑看看内核編讦时供成的uuciamfs.dat 冇哪陀文件.我们就可以用下面的命令:.zcatimtramfs.data cpio gz cpio-ta在标准输出中打出文件名列表.使用尹迭项对以/i cpio

20、命令执行时输出详细信息:右扌)包戎畏”文件时.输出(2处理的文件名:St选项连用时则眾小文件的详纽 b4的输出内春.V选顶则用打点的方式显示cpio命令的执行进度信息.个点代表处理一个文件(A) switch_root二十、switch_root命令。诊f J mitramfs的系统(如第卩4 的mini.lrnux),通出uutiamE祁圧为安製垃终的根文件系统做准$匚作.它的故施步需耍安製垠终的根文竹系统.然品切换到斯根文件: 往的堆 j ramdisk的 lmtrd fbnpivotfootn?令切换到新的根文fl务统.然肩卸伐mndisk们址uutnmf:;trootf: lliroo

21、tfs既不能。pivot_root.也不能umount为了从lmtramfe中切换到新根文件系统.需要件如下处理:.(1)删除Kxxfc的全部内容.释放空间find-xdnr -exccrm* f7(2)安装新的楓文件系统并切换-cdneu-mount;mount-move. ;chroot. (3)lEstdin stdout stderr |If|加到新的dcv/consolc.然版执行新文件系统的mit程序。1:述步骤比较麻烦.而II.要解决一个晅耍的何题:第一步删除rootfs的所仃内容也删除J所有的命令那么肓续如何再使用这兆命V busybox的解决方案是提供fswitchroot命

22、令.完成全部的处理过程.使用起來II幡力便。swch_nxt命令的格式是:。switch_root(构建.(1)改写诚潮本#!/bin shemount-tf rocproc. proc cmount-tsysfcsysfc sysomdev-Samountdev/sdaS mnt (注盘:为了简叽 我们血接把CLFS分区得死任inn囚木中了).exccswitchroot.nmtsbm. nut把它们配誉成模块.圮厉.編讦内核.并把编译好的内核模块安装到image的F1录下:. make.makcINSTALL.MODPATH/mitramfs-tcstimagcmodulcs.instal

23、i命令执疔完毕后./f imaguhbmodules/2617.13 kernel/driversscsi11 录卜安装 了4个内核模文。件:scsi_modko* sd_modko* ata_puxko* hbatako*它们就是所需的0更盘控制器的骡动用序。好了.都准备好了.町以用甲。命令生成mintramfc不过.为了方便后10的试验.我们再把irnt脚木改成。#!/bm 血mount-tp r ocproc. proc。mount-tsysfcsysfc sysomdev-Soexec bin sh.使系统启动麻进入ihdl环境,并I用cxec调用的方式,便shell的p】d为1 能够

24、执行利ichjoot命令.二I三、试验:用imtramfcP的内核模块安装硬盘文件系统.用新牛成的uugmft启动系统内核并没冇fl动加我硬盘控制器的驱动程库.所以。devil求卜.也没冇皿等便盘设条文件。好吧.我们自己加我内核模块文件不幸的是.busybox的modprobc命令执行不正瓠不能力 模块。怀疑是busybox的modpxobc命令配賢或编译仃问岂.续再花时何定位吧先用msmod命令依次加戦。fr/f/lib.modules.2.6 17,B/modules.dcp.弄清范4个模块的依赖关系.执行卜面的命令側徴:。insmodscsi modsinsmodlibata。msmod

25、atapiiXoinsmodsd_mod然后再用。mdev-so命令生成硬盘的设弘文件.好了.可以安装CLFS的酸盘分区.并把根文件系统切换到CLFS的發盘分区:mount dcv/sdaS mntexccitch_root. mnt sbin uut系统正常启动到了CLFS.我们町以做到用imtramfc中的便盘控制器的驱动模块安装硬盘分区了.二十四.mdcv的hotpfug模式.I:面的试验中.我们在加我完骡动模块躲调川Jmdez命令來工成帔盘的设条文件。体实对以使用mdr的hotplugf式*加戦内核对应的设备文件:在执行msmod命令询用。echo/sbm mdw/proc sys-

26、kernel hotplug:命令设置系统的hotplug程序为mdev,后续便用gmod命令加戏模块时.系统fl动调用mdev生成相应的设文fl 注总:内技必须配hotplug功能,ifijlWiril到的CLFS址简内枝配置方条足没仃配置hotplug丈持的,(八coldplug a二十五.udcv的coldplug模式.内核任启动时L1经检测到了系统的磧件设笛并把硕件设条信总通过即出内核虚拟文件系统导出.udcv扌制sy止文件系统.松抑减件设条信息牛成热抽拔(hotphig)MI udev再读取这畔那 件牛成对应的硬件设备文件。由干没冇实际的酸件插拔动作.所以这一过程被称为coldplu

27、g。我们的mitramfs就是利用这一机制.设.备的驱动程序楔块。udev完f&coldplug操作需要F iftl三个程序:。udevd-f|为deomon记Ahotplug ft件.然后援队A;再发送给udev避免卩HT冲突racecondiuons)。udevtriggerI HAisysfs文fl 系统 I.成和应的嫂fl I殳备hotplug 件。udevxttkm石udevM件队列.等队列内岁件全部处理完毕才退出。6:uutramfs的imt脚木中町以执行卜1佰的讹旬买现coldplug功能:。mkdu-p. dev/.ude* db udevd-daemon omkdir-p/d

28、ev/.udev queueudevtnggcudevsettlc.许多文样提到的在udevd .daemon命令前要执行.echoprocsys kernel hotphig命令.经验证.在我们的uutramfc环境卜的coldplug功能中并不需要.二十六试验,用udevFl动加我设条驱动模块.解udev的coldphig的机理.我们就试峻-卜用udev自动加战设备痕动模块.并生成酸件设条文件。 1)从tbinll录卜拷贝udevd. udcvtnggm udevsettlcFi疔到imageH杲卜的sbmH录卜并MJlddife令找到它们所冊要的动态艸文件 image 11卜的hbll

29、录卜。(2)修改initial木增加coldplug功能:o徉bin shamount-tprocproc/pioc -mount-tsysfesysfc sys。mdev-somismgudevautoloadharddukdiivermodule.mkdir-p. dev.udcv/dbudcvd-daemon rnkdir-p - dc- udev*queue:udevtrigger.udevsettfc mount dev/sdaSinntkilhlludevdexccswitch_root mnt sbui uut .注氐 任切换到血止楓文件系统前,要把udevd进段杀押.否则会和真

30、止根文fl系统中的udev脚木的执行相冲究。这就是上inikillalh 作用.(3)编写udev规则文件。规則文flfiudev的灵魂.没冇规则文件.udev无法门动加戏便件设爸的驱动模块为了简我们H接使用CLFS中的40modproberules.把它拷贝到imageH录卜的etcudev/nHc.dlI录.冇关udev的规则文件编歸.己超出了木文的范1用厉续我冇町能专文描述.耐网卄柏TTER特*粹斗祁叭卄“卄和加卄叭“丽卄柏TT网杯柏叶叭叭网。#Descnpuon:40 modprobe rules.#aAuthors BasedonOpcnSuseUdevRules:#akay.sie

31、Trssuse de ;#aAdaptedto: JimGiffordrLFS AlrxanderE Patrakov。Version 00 01.补Totes:.#0戸吟吋市厂f严ft汗TrrrfTrfjyFT仃TTfyprf尸帀茸“盯尸叮尸戸仃吓rr叮尸幵仔rr 叮ft尸产Tf尸ft呷ft戸戸叮产叮尸厂讦叮叮厂门rr叮尸可rrrrTPhotplug:ENVrM0DALIAS =”? RUN=M sbm modprobcSenvMODALIAS *。SCSloSUBSYSTEMMscsi_deviceM.ACTIONMMaddH.SYSFSdevice;type0|7|14*RUN*R sb

32、in modpiobc5d_mod,fSUBSYSTEMRscscdcviceMACTION-#,addSYSFSdevicetypeRl.SYSFSfdevice vendor,OusSueamMJlUN,7sbin.modprobeo5StMSUBSYSTEMlcti_devkx”ACnONFd的ll.524Mxtale。Loading肖的插述。(4) 拷貝modprobc命令。liV 节提到过.busy box 的 modpxobc.命令不能正常使用.所以我们需耍拷贝仙口目录F的modprobe命令到image目录F的sbm11供udev加我内核模块使用.再用ldd命令检金T/sbmmo

33、dpiobe.命令所需的动态悴文件如果冇则拷贝到unage hbll下.(我的检充结果宓 除了 11乂6外不需要其他动态疔所以不需要拷贝好了.匝新牛试uutramfs启动CLFS条统.imtramfs能第门动加伐佼盘汝笛的农动模块.系统顺利地从uutramfs切换到了貞正的CLF 统.(九)内核编洋时构建lmtramfe补遗;二十七、比接把cpi。打包文件编译进内核.如果我们仃 个已经做好的cpx格式的uutramfs町以金内孩编泮时I(接编计进内核。冋忆一匸第一节.的内容.我们4内核配置参数中的imtromfssourcesfillS项卜输入构lllmitramfs的H录总径。人实我们也町以

34、血接输出现成的imtramfs: 样任内核编诈时,就町以把它编译进内核了。便用这种方法,有两点需嬰注意:TaigctAiclutectuieVaiiant 1686 PackageSelectionfortlietaiget JR if1) BusyBox 的选项(缺省、是选中的。Taigetfiksystemoptions :JR 消 ext2rootfilesystem (缺省楚 il 中的Toolchain-Toolchaintype Buildroottooichain(3) 編讯执行.make命令.buildrootTH会fl动卜裁所需箜的源文件并fl动編洋.等一两个小时乐,tool

35、cham編洋好了,编洋好的toolchain位于.buildroot build_i686 stagmg_dir usr/bin.。IbA F匚貝命令的前缀足”86hmix三十、编ifBusyboxrj?态连接uclibc库。一般而言,使用uclibc库是为r把它静态连接到bxybox中。具体步驟是:。(1) iCJuclibctoolcham 的 11 录汝加到 PATH 屮=6i*/.bash_profilc文件11淤加:。setPATHsoitmcludesuchbctoolchainifitcxuit-buildroot build_i686 stagmg_dir.;usr bin;t

36、henPATH哼PATHF:7bmkkootbuild686 汨gmg_dir uxbin.fio(2) 配誉busybox静态连接库。住busybox的配置界面中.选择:.BuildOpuons-BuildBusyBoxasastaticbmanlnosharcdlibs);(3) 编i也执行.makeCROSS_COMPILE=i686-linux.命令-交义编ifbusybox.城后编泽生成的是的态连接的可执行文件不需嬰在mitram倉中拷贝库文件。JI: buildroot II 动 构 ituutramfs:buildrootcJI实际是个功能强人的柿文件系统构建IJI它以uclibcfllbusyboxfl为系统构建的娠础.toolchamll它构建系统的屮何产品 mitramfs 种特殊的根文件系统 Y然也叮以用buUdiootEAn动构建下面足构建方法的简耍描述:.(1)配置.fLbuildroot的配置界而下做如

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!