新聞中心
作為當(dāng)今更流行的開(kāi)源操作系統(tǒng)之一,Linux在各種計(jì)算機(jī)系統(tǒng)中得到了廣泛的應(yīng)用。其中,Linux在ARM架構(gòu)的處理器上的應(yīng)用越來(lái)越受到重視,這主要得益于ARM處理器在移動(dòng)設(shè)備、物聯(lián)網(wǎng)等領(lǐng)域中的廣泛應(yīng)用。而作為L(zhǎng)inux在ARM架構(gòu)中的一部分,ARM啟動(dòng)代碼負(fù)責(zé)啟動(dòng)Linux內(nèi)核,是ARM架構(gòu)中非常重要的一部分。本文就將對(duì)ARM啟動(dòng)代碼進(jìn)行深入分析,以便更好地理解ARM架構(gòu)下的Linux啟動(dòng)過(guò)程。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括月湖網(wǎng)站建設(shè)、月湖網(wǎng)站制作、月湖網(wǎng)頁(yè)制作以及月湖網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,月湖網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到月湖省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
一、ARM啟動(dòng)代碼的組成
ARM啟動(dòng)代碼主要由以下幾部分組成:
1. 處理器的匯編語(yǔ)言代碼
處理器的匯編語(yǔ)言代碼是整個(gè)ARM啟動(dòng)過(guò)程中的之一部分,它包含匯編代碼文件start.S和vectors.S。其中,start.S主要完成ARM啟動(dòng)過(guò)程中的最初一些工作,如設(shè)置堆棧指針、清零、初始化、復(fù)位等。而vectors.S文件則是ISR(中斷服務(wù)程序)向量表文件,包含了中斷相關(guān)的代碼,為以后的中斷處理做好準(zhǔn)備。
2. 腳本文件
腳本文件主要負(fù)責(zé)將.start.S和vectors.S文件編譯成可執(zhí)行文件。一般使用GNU編譯工具鏈中的腳本,主要是通過(guò)鏈接動(dòng)態(tài)庫(kù),編譯成可以在Linux內(nèi)核上運(yùn)行的可執(zhí)行文件。
3. jzboot
jzboot是一個(gè)嵌入式啟動(dòng)程序,也是ARM啟動(dòng)代碼中的重要一環(huán)。它主要負(fù)責(zé)芯片上Flash的解析,讀取Linux內(nèi)核等操作。jzboot是一個(gè)十分底層的程序,其代碼主要是匯編語(yǔ)言編寫(xiě)完成的。
4. U-boot
U-boot是一個(gè)開(kāi)源、強(qiáng)大的引導(dǎo)加載程序,是ARM啟動(dòng)代碼中的一個(gè)外部程序,在ARM架構(gòu)下非常重要。它能夠通過(guò)串口、網(wǎng)口、SD卡等多種方式加載內(nèi)核文件,功能強(qiáng)大,使用方便。
二、ARM啟動(dòng)代碼的啟動(dòng)過(guò)程
在ARM啟動(dòng)代碼的啟動(dòng)過(guò)程中,主要是通過(guò)jzboot和U-boot兩個(gè)程序?qū)崿F(xiàn)的,其具體過(guò)程如下:
1. CPU的啟動(dòng)和復(fù)位
當(dāng)CPU電源被打開(kāi)時(shí),系統(tǒng)會(huì)執(zhí)行硬復(fù)位操作(reset)。在這個(gè)過(guò)程中,處理器會(huì)訪問(wèn)開(kāi)始地址(起始地址),進(jìn)行地址重置并以異常狀態(tài)運(yùn)行。此時(shí)將進(jìn)入jzboot中。
2. jzboot的啟動(dòng)
當(dāng)硬復(fù)位成功后,系統(tǒng)會(huì)進(jìn)入到j(luò)zboot中,由jzboot接管啟動(dòng)過(guò)程。jzboot主要負(fù)責(zé)解析芯片上的Flash,根據(jù)配置文件找到Linux內(nèi)核,并將內(nèi)核文件從Flash中讀取到內(nèi)存中。
3. U-boot的啟動(dòng)
在將內(nèi)核文件讀取到內(nèi)存后,接下來(lái)會(huì)由U-boot接管啟動(dòng)過(guò)程。U-boot負(fù)責(zé)將從Flash中讀取到的Linux內(nèi)核文件加載到內(nèi)存中,并且完成內(nèi)核的初始化等工作。
4. Linux內(nèi)核的啟動(dòng)
Linux內(nèi)核啟動(dòng)后,會(huì)首先執(zhí)行啟動(dòng)代碼中的_init和_start函數(shù),并向系統(tǒng)發(fā)送初始化和啟動(dòng)消息,以便其他進(jìn)程能夠響應(yīng)。初始化完成后,Linux內(nèi)核會(huì)啟動(dòng)用戶進(jìn)程,然后進(jìn)入到Linux內(nèi)核的主函數(shù),并開(kāi)始執(zhí)行系統(tǒng)調(diào)用等操作。
ARM啟動(dòng)代碼是整個(gè)Linux系統(tǒng)的核心部分,其在啟動(dòng)和運(yùn)行過(guò)程中,通過(guò)多個(gè)程序的協(xié)調(diào)合作,最終實(shí)現(xiàn)了系統(tǒng)的開(kāi)機(jī)自檢、初始化、加載內(nèi)核和啟動(dòng)等一系列過(guò)程,是Linux操作系統(tǒng)中不可或缺的一部分。
相關(guān)問(wèn)題拓展閱讀:
- Linux系統(tǒng)分析、裁減及RAMOS制作
Linux系統(tǒng)分析、裁減及RAMOS制作
是不是Linux中的RAMDISK文件系統(tǒng)啊,文件系統(tǒng)在內(nèi)存中,斷電后就沒(méi)了
# dd if=/dev/zero/ of=initrd.img bs=1k count=8192()
# mkfs.ext2 -F initrd.img
# sudo mount -t ext2 -o loop initrd.img /mnt/initrd (提前建立)
# cp _install/* /mnt/initrd -a(注意使用圓野早busybox制作的文件系統(tǒng)的大小不能超過(guò)之一步開(kāi)辟的磁盤(pán)空間的大?。?/p>
# sudo umount /mnt/initrd
# gzip –best -c initrd.img > initrd.img.gz
把制作好的,initrd.img.gz下載到內(nèi)橘雀存在,在linux啟動(dòng)的脊純時(shí)候,掛載這個(gè)文件系統(tǒng)就可以了
使用Linux開(kāi)發(fā),根據(jù)應(yīng)用需求的不同有不灶逗同的配置開(kāi)發(fā)方法,但是一般都要經(jīng)過(guò)如下的過(guò)程:
1.建立開(kāi)發(fā)環(huán)境
操作系統(tǒng)一般使用RedHat-Linux,版本從7到9都可以,選擇定制安裝或全部安裝,通過(guò)網(wǎng)絡(luò)下載相應(yīng)的GCC交叉編譯器進(jìn)行安裝(例如arm-Linux-gcc、arm-μclibc-gcc),或者安裝產(chǎn)品廠家提供的交叉編譯器。
2.配置開(kāi)發(fā)主機(jī)
配置MINICOM,一般的參數(shù)為波特率為bps,數(shù)據(jù)位為8位,停止位為1,無(wú)奇偶校驗(yàn),軟件硬件流控設(shè)為無(wú)。在Windows下的超級(jí)終端的配置也是這樣的。MINICOM軟件的作用是作為調(diào)試嵌入式開(kāi)發(fā)板的信息輸出的監(jiān)視器和鍵盤(pán)輸入的工具。配置網(wǎng)絡(luò),主要是配置NFS網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻,簡(jiǎn)化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過(guò)程。
3.建立引導(dǎo)裝載程序BOOTLOADER
從網(wǎng)絡(luò)上下載一些公開(kāi)源代碼的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據(jù)自己具體的芯片進(jìn)行移植修改。有些芯片沒(méi)有內(nèi)置引導(dǎo)裝載程序,例如三星的ARM7、ARM9系列芯片,這樣就需要編寫(xiě)開(kāi)發(fā)板上Flash的燒寫(xiě)程序,網(wǎng)絡(luò)上有免費(fèi)下載的Windows下通過(guò)JTAG并口簡(jiǎn)易仿真器燒寫(xiě)ARM外圍Flash芯片的燒寫(xiě)程序,也有Linux下的公開(kāi)源代碼的J-Flash程序。如果不能燒寫(xiě)自己的開(kāi)發(fā)板,就需要根據(jù)自己的具體電路進(jìn)行源代碼修改。這是系統(tǒng)正常運(yùn)行的之一步。如果購(gòu)買(mǎi)了廠家的仿真器當(dāng)然比較容易燒寫(xiě)Flash,這對(duì)于需要迅速開(kāi)發(fā)自己產(chǎn)品的人來(lái)說(shuō)可以極大地提高開(kāi)發(fā)速度,但是其中的核心技術(shù)是無(wú)法了解的。
4.下載別人已經(jīng)移植好的Linux操作系統(tǒng)
如μCLinux、ARM-Linux、PPC-Linux等,如果有專門(mén)針對(duì)所使用的CPU移植好的Linux操作系統(tǒng)那是再好不過(guò)的,下載后再添加自己的特定硬件的驅(qū)動(dòng)程序,進(jìn)行調(diào)試修改,對(duì)于帶MMU的CPU可以隱前賣(mài)使用模塊方式調(diào)悔薯試驅(qū)動(dòng),對(duì)于μCLinux這樣的系統(tǒng)則需編譯進(jìn)內(nèi)核進(jìn)行調(diào)試。
5.建立根文件系統(tǒng)
從下載使用BUSYBOX軟件進(jìn)行功能裁減,產(chǎn)生一個(gè)最基本的根文件系統(tǒng),再根據(jù)自己的應(yīng)用需要添加其他程序。默認(rèn)的啟動(dòng)腳本一般都不會(huì)符合應(yīng)用的需要,所以就要修改根文件系統(tǒng)中的啟動(dòng)腳本,它的存放位置位于/etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自動(dòng)掛裝文件系統(tǒng)的配置文件/etc/fstab,具體情況會(huì)隨系統(tǒng)不同而不同。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,需要使用mkcramfs、genromfs等工具產(chǎn)生燒寫(xiě)映像文件。
6.建立應(yīng)用程序的Flash磁盤(pán)分區(qū)
一般使用JFFS2或YAFFS文件系統(tǒng),這需要在內(nèi)核中提供這些文件系統(tǒng)的驅(qū)動(dòng),有的系統(tǒng)使用一個(gè)線性Flash(NOR型)512KB~32MB,有的系統(tǒng)使用非線性Flash(NAND型)8~512MB,有的兩個(gè)同時(shí)使用,需要根據(jù)應(yīng)用規(guī)劃Flash的分區(qū)方案。
7.開(kāi)發(fā)應(yīng)用程序
應(yīng)用程序可以放入根文件系統(tǒng)中,也可以放入YAFFS、JFFS2文件系統(tǒng)中,有的應(yīng)用不使用根文件系統(tǒng),直接將應(yīng)用程序和內(nèi)核設(shè)計(jì)在一起,這有點(diǎn)類似于μCOS-II的方式。
8.燒寫(xiě)內(nèi)核、根文件系統(tǒng)、應(yīng)用程序
9.發(fā)布產(chǎn)品
參考此文的附件,講得比較詳細(xì)
無(wú)非是ramdisk的概念,原理,優(yōu)點(diǎn),制作過(guò)程,由ramdisk的啟發(fā),比如livecd,liveu本質(zhì)上都是一回事
ramdisk制作很簡(jiǎn)單,多做兩襪掘遍很容易成功
找書(shū)看看仿好纖基本命備仿令,FHS標(biāo)準(zhǔn),內(nèi)核配置,推薦在vmware上做,vmware上內(nèi)核配置的帖子比較多,成功率大
linux arm啟動(dòng)代碼分析的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux arm啟動(dòng)代碼分析,深入分析Linux ARM啟動(dòng)代碼,Linux系統(tǒng)分析、裁減及RAMOS制作的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營(yíng)銷(xiāo)公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站維護(hù),網(wǎng)絡(luò)營(yíng)銷(xiāo),SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽(yáng)、雅安、重慶、貴州、昆明、鄭州、湖北十堰機(jī)房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。
分享文章:深入分析Linux ARM啟動(dòng)代碼 (linux arm啟動(dòng)代碼分析)
本文路徑:http://m.fisionsoft.com.cn/article/dhodheh.html


咨詢
建站咨詢
