久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 10273|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

Tiny6410開(kāi)發(fā)板Linux系統(tǒng)自學(xué)筆記

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:138371 發(fā)表于 2016-9-3 23:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一、嵌入式Linux系統(tǒng) 自學(xué)計(jì)劃:
0、學(xué)習(xí)嵌入式Linux系統(tǒng)啟動(dòng)、加載的工作原理。
1、搭建針對(duì)目標(biāo)CPU的Linux編譯環(huán)境。
2、移植、編譯針對(duì)目標(biāo)CPU單板的Bootloader。
3、移植、編譯針對(duì)目標(biāo)CPU單板的Linux內(nèi)核。
4、制作用于Linux內(nèi)核啟動(dòng)的根文件系統(tǒng)。
4、定制、開(kāi)發(fā)針對(duì)目標(biāo)CPU單板的硬件驅(qū)動(dòng)程序。
5、開(kāi)發(fā)基于嵌入式Linux平臺(tái)的應(yīng)用程序。
 
二、參考文檔:
《ARM學(xué)習(xí)報(bào)告1~3》
《嵌入式Linux入門(mén)筆記》
《嵌入式Linux性能詳解》
《Tiny6410 Linux開(kāi)發(fā)指南》

6410 BootLoader啟動(dòng)過(guò)程分析:
S3C6410支持從SD卡或Nand FLASH直接啟動(dòng),但是實(shí)際上板子上電后,會(huì)首先執(zhí)行芯片內(nèi)部iRom中的代碼,iROM中的代碼會(huì)根據(jù)GPN[15:13]的管腳來(lái)判斷從哪個(gè)存儲(chǔ)設(shè)備中讀取4KB的啟動(dòng)代碼,并放入SteppingStone中運(yùn)行,這段代碼被稱(chēng)為Bootloader1(BL1)。【因?yàn)镾teppingStone 是SRAM,所以不需要初始化就可以使用】
所以,整個(gè)啟動(dòng)過(guò)程可以分成BL0, BL1, BL2 三個(gè)階段, 其中BL0是固化在s3c6410內(nèi)部的iROM中的,
1、BL0處理流程如下圖所示

2、BL1的處理流程
對(duì)于SD卡, BL1代碼位于(totalSector - 18) 的扇區(qū)
對(duì)于SDHC卡,BL1代碼位于(totalSector-1042)的扇區(qū)
對(duì)于NANDFLASH,BL1代碼位于最前面的4K空間
因?yàn)樽罱K的系統(tǒng)需要運(yùn)行在DDR內(nèi)存中,所以,BL1首先需要執(zhí)行DDR的初試化,然后再將GPN[15:13]管腳指定的存儲(chǔ)設(shè)備中bootloader代碼(BL1+BL2)拷貝到DDR中,然后重定位到編譯器編譯時(shí)指定的位置,然后跳轉(zhuǎn)。

3、此時(shí),DDR中的BL2就是完成一些復(fù)雜的初始化,以及很多輔助調(diào)試功能,比如網(wǎng)絡(luò)命令,usb命令,nand命令等等,最后執(zhí)行你的bootcmd,將內(nèi)核加載到指定位置,將bootargs放到指定位置,傳遞給內(nèi)核mach_type,bootargs的存放地址,然后跳轉(zhuǎn)到內(nèi)核執(zhí)行,到這里bootloader就完成使命然后消失了。以說(shuō)我們可以認(rèn)為BLx是bootloader的幾個(gè)階段,其實(shí)如果只是基本功能的話,完全可以將代碼壓縮到8K以?xún)?nèi),那么就不需要重定位,編譯的時(shí)候直接從0地址開(kāi)始就行了。
 
五、BL2將Linux內(nèi)核加載到RAM的原理分析
BL1的主要工作包括:
1、硬件設(shè)備初始化
2、加載U-Boot第二階段代碼到RAM空間
3、設(shè)置好棧
4、跳轉(zhuǎn)到第二階段代碼入口
 
BL2的主要工作包括:
1、初始化本階段使用的硬件設(shè)備
2、檢測(cè)系統(tǒng)內(nèi)存映射
3、將內(nèi)核從Flash讀取到RAM中
4、為內(nèi)核設(shè)置啟動(dòng)參數(shù)
5、調(diào)用內(nèi)核
 
1、BL1結(jié)束之后,BL2執(zhí)行之前,系統(tǒng)內(nèi)存的使用情況 
 
2、嵌入式LInux設(shè)備N(xiāo)AND FLASH上典型的空間分配情況:
 
如上圖所示,Boot Loader文件內(nèi)核啟動(dòng)參數(shù)內(nèi)核文件根文件系統(tǒng)的鏡像文件, 這四個(gè)文件從FLASH的低地址開(kāi)始依次保存。
6410大致啟動(dòng)過(guò)程是:芯片上電找到NAND FLASH起始地址上保存的Boot Loader并運(yùn)行,Boot Loader讀取內(nèi)核啟動(dòng)參數(shù),再將內(nèi)核
文件和根文件系統(tǒng)的鏡像文件加載到RAM中運(yùn)行。
所以,我們后面的學(xué)習(xí)目標(biāo)就是如何為特定的CPU和目標(biāo)單板生成 上述四個(gè)系統(tǒng)文件,以及它們的系統(tǒng)工作原理。
三、6410系統(tǒng)內(nèi)存分配:
ARM CPU采用統(tǒng)一存儲(chǔ)空間映射,將各種存儲(chǔ)設(shè)備:寄存器,ROM,RAM,F(xiàn)lash都映射到這一地址空間。
S3C6410的物理內(nèi)存分成Memory和Pheriperal兩部分,地址范圍分別為0x0~0x6fffffff 和 0x7000_00000~x7fffffff。
Memory,又叫主內(nèi)存,分為4大區(qū)域,分別是啟動(dòng)鏡像區(qū)、內(nèi)部?jī)?nèi)存區(qū)、靜態(tài)內(nèi)存區(qū)、動(dòng)態(tài)內(nèi)存區(qū)
0x0000_0000~0x07FF_FFFF 128MB 啟動(dòng)鏡像區(qū)
0x0800_0000~0x0BFF_FFFF   64MB 內(nèi)部內(nèi)存區(qū)ROM
0x0C00_0000~0x0FFF_FFFF   64MB 內(nèi)部內(nèi)存區(qū)RAM 【Stepping Stone(8KB)】
啟動(dòng)鏡像區(qū)物理地址為0x00000000~0x07ffffff,共128MB。這個(gè)區(qū)域的作用正如它的名字所述,是用來(lái)啟動(dòng)系統(tǒng)的。
但是這個(gè)范圍內(nèi)并沒(méi)有實(shí)際的存儲(chǔ)介質(zhì)與之對(duì)應(yīng),只能在通過(guò)OM[4:0]選擇具體的啟動(dòng)介質(zhì)后再把相應(yīng)介質(zhì)的物理
地址映射到這個(gè)啟動(dòng)區(qū),比如說(shuō)選擇了IROM 啟動(dòng)方式后,就把IROM所占的地址空間映射為0x00000000開(kāi)始的空間。

內(nèi)部?jī)?nèi)存區(qū)物理地址為0x08000000~0x0fffffff,共128MB。這個(gè)區(qū)域?qū)?yīng)著內(nèi)部的內(nèi)存地址,內(nèi)部的ROM和SRAM都
是分布在這個(gè)區(qū)間。其中,0x08000000~0x0bffffff對(duì)應(yīng)著內(nèi)部ROM,當(dāng)然實(shí)際上內(nèi)部的ROM也并沒(méi)有64MB這么多,
只有32KB是有實(shí)際存儲(chǔ)介質(zhì)的,這32KB是一個(gè)只讀區(qū),放的是IROM方式下的啟動(dòng)代碼,選擇IROM啟動(dòng)的時(shí)候首先
運(yùn)行的代碼就是這一部分,稱(chēng)為BL0,這部分代碼由廠家固化。0x0c000000~0x0fffffff對(duì)應(yīng)內(nèi)部SRAM,實(shí)際可用
的SRAM按照三星的手冊(cè)是4KB,其實(shí)這就是用于nand flash啟動(dòng)的Steppingstone。

// 靜態(tài)存儲(chǔ)區(qū) 0x1000_0000~0x3FFF_FFFF 3*128MB
0x1000_0000~0x17FF_FFFF  128MB
0x1800_0000~0x1FFF_FFFF  128MB DM9000AEP
0x2000_0000~0x27FF_FFFF  128MB
0x2800_0000~0x2FFF_FFFF  128MB
0x3000_0000~0x37FF_FFFF  128MB
0x3800_0000~0x3FFF_FFFF  128MB
靜態(tài)內(nèi)存區(qū)物理地址為0x10000000~0x3fffffff,共3*128MB。這個(gè)區(qū)域用于訪問(wèn)掛在外部總線上的設(shè)備,比如說(shuō)
SRAM、NOR flash、oneNand等。當(dāng)映射到這些器件的時(shí)候這些bank的地址也不能再使用了,訪問(wèn)這些非線性存儲(chǔ)
器還是得通過(guò)Pheriperal空間的AHB總線進(jìn)行,和S3C2410中的訪問(wèn)方式是一樣的。

// 動(dòng)態(tài)存儲(chǔ)區(qū) 0x4000_0000~0x6FFF_FFFF 3*256MB
0x4000_0000~0x47FF_FFFF  128MB
0x4800_0000~0x4FFF_FFFF  128MB
0x5000_0000~0x5FFF_FFFF  256MB  DDR RAM
0x6000_0000~0x6FFF_FFFF  256MB  DDR RAM
動(dòng)態(tài)內(nèi)存區(qū)物理地址為0x40000000~0x6fffffff,共3*256MB。其中第一個(gè)256MB為保留區(qū),實(shí)際使用的動(dòng)態(tài)內(nèi)存區(qū)
為 0x50000000~0x6fffffff,又分為2個(gè)區(qū)間,分別占256MB,可以通過(guò)DMC的Xm1CS[1:0]來(lái)進(jìn)行著2個(gè)區(qū)間的選擇。
這個(gè)內(nèi)存區(qū)主要是擴(kuò)展DRAM,最大可以擴(kuò)展512MB的DRAM。

// 外設(shè)地址空間
0x7000_0000~0x7xxx_xxxx


 
六、搭建針對(duì)目標(biāo)CPU的Linux編譯環(huán)境
1、建立Linux 開(kāi)發(fā)環(huán)境,首先安裝Linux系統(tǒng),為了新手學(xué)習(xí)簡(jiǎn)單,建議用vmware虛擬機(jī)安裝Linux系統(tǒng),實(shí)際商業(yè)開(kāi)發(fā)過(guò)程,這種方式可能不夠嚴(yán)謹(jǐn)。
2、安裝Linux交叉編譯工具鏈:
我們使用的是arm-linux-gcc-4.5.1,它默認(rèn)采用armv6指令集,支持硬浮點(diǎn)運(yùn)算,下面是安裝它的詳細(xì)步驟。
Step1:將arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz 復(fù)制到Linux系統(tǒng)的某個(gè)目錄下如tmp/,
然后進(jìn)入到該目錄,執(zhí)行解壓命令:
#cd /tmp
#tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /
注意:C 后面有個(gè)空格,并且C 是大寫(xiě)的,它是英文單詞“Change”的第一個(gè)字母,在此是改變目錄的意思。/表示解壓到根目錄,這里執(zhí)行該命令,
將把 arm-linux-gcc 安裝到/opt/FriendlyARM/toolschain/4.5.1 目錄。
【Linux系統(tǒng)壓縮文件的格式說(shuō)明】
*.Z            compress 程序的壓縮檔案;
*.gz          gzip 程序壓縮的檔案;
*.bz2        bzip2 程序壓縮的檔案;
*.tar          tar 程序打包的數(shù)據(jù),并沒(méi)有壓縮過(guò);
*.tar.gz     tar 程序打包的檔案,其中并且經(jīng)過(guò) gzip 癿壓縮
*.tar.bz2  tar 程序打包的檔案,其中并且經(jīng)過(guò) bzip2 癿壓縮
【tar命令的參數(shù)說(shuō)明】:
-c :建立打包檔案,可搭配
-v :察看過(guò)程中被打包的文件名
-t :察看打包檔案癿內(nèi)容噸有哪些的文件名
-x :解打包或解壓縮,可以搭配 -C (大寫(xiě)) 在特定目錄解開(kāi) 特別留意的是, -c, -t, -x 不可同時(shí)出現(xiàn)。
-j :透過(guò) bzip2 的支持進(jìn)行壓縮/解壓縮:此時(shí)檔名最好為 *.tar.bz2
-z :透過(guò) gzip 癿支持迚行壓縮/解壓縮:此時(shí)檔名最好為 *.tar.gz
-v :在壓縮/解壓縮的過(guò)程中,將正在處理的文件名顯示出來(lái)
-f filename:-f 后面要立刻接要被處理的文件名
-C 目錄 :這個(gè)選頃用在解壓縮,若要在特定目錄解壓縮,可以使用這個(gè)選頃。
Step2:把編譯器路徑加入系統(tǒng)環(huán)境變量,運(yùn)行命令。
#gedit /root/.bashrc
編輯/root/.bashrc 文件,注意“bashrc”前面有一個(gè)“.”,修改最后一行為
export PATH=$PATH: /opt/FriendlyARM/toolschain/4.5.1/bin
注意路徑一定要寫(xiě)對(duì),否則將不會(huì)有效。重新登錄系統(tǒng)(不必重啟機(jī)器,開(kāi)始->logout 即可),使以上設(shè)置生效,在命令行輸入arm-linux-gcc –v,會(huì)出現(xiàn)如下信息,這說(shuō)明交叉編譯環(huán)境已經(jīng)成功安裝。 
 
【反編譯工具:arm-linux-objdump】
【ELF文件查看工具:arm-linux-readelf 】
  
七、Bootloader文件的原理、移植和編譯
1、uboot代碼移植
首先執(zhí)行如下命令,分別創(chuàng)建工作目錄/opt/FriendlyARM/mini6410/linux和臨時(shí)目錄,并把光盤(pán)中l(wèi)inux 目錄中的所有文件都復(fù)制到/tmp/linux 目錄中,
#mkdir –p /opt/FriendlyARM/mini6410/linux
#mkdir /tmp/linux
然后在工作目錄/opt/FriendlyARM/mini6410/linux 中執(zhí)行解壓安裝U-boot 源代碼
#tar xvzf /tmp/linux/ u-boot-mini6410-20101106.tar.gz
將u-boot代碼加壓到opt/FriendlyARM/mini6410/linux/u-boot-mini6410目錄下。
 
uboot代碼目錄結(jié)構(gòu):
板級(jí)移植需要修改的板級(jí)配置文件:
 
2、uboot代碼編譯
在 opt/FriendlyARM/mini6410/linux/u-boot-mini6410目錄下找到makefile文件,打開(kāi)文件可以看到幾個(gè)相關(guān)的編譯選項(xiàng),如下:
mini6410_nand_config-ram128 // 為系統(tǒng)內(nèi)存128M,從NANDFLASH啟動(dòng)的設(shè)備生成編譯配置文件
mini6410_sd_config-ram128     // 為系統(tǒng)內(nèi)存128M,從SD卡啟動(dòng)的設(shè)備生成編譯配置文件
mini6410_nand_config-ram256 // 為系統(tǒng)內(nèi)存256M,從NANDFLASH啟動(dòng)的設(shè)備生成編譯配置文件
mini6410_sd_config-ram256     // 為系統(tǒng)內(nèi)存256M,從SD卡啟動(dòng)的設(shè)備生成編譯配置文件
 
進(jìn)入uboot源代碼根目錄:cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410
生成配置文件:make mini6410_nand_config-ram256
開(kāi)始編譯:make
最終生成u-boot.bin文件,用于下載到FLASH上。為了便于區(qū)分,可以將u-boot.bin文件改名為u-boot_nand-ram256.bin。 
另外,我們也可以選擇編譯用于SD卡啟動(dòng)的uboot文件。

要把新編譯生成的u-boot.bin下載到開(kāi)發(fā)板的FLASH上,需要先用SD卡上的uboot啟動(dòng)6410開(kāi)發(fā)板,SD卡啟動(dòng)在串口下顯示如下用戶(hù)菜單: 
[f]:輸入f,格式化FLASH,如上圖所示,
[v]:輸入v,將uboot.bin文件下載到FLSAH上,如下圖所示:
注意,下載uboot時(shí)需要使用dnw.exe工具,且只有先輸入v以后,dnw.exe工具上的狀態(tài)才會(huì)顯示[USB:ok]
 
 將uboot下載到FLASH以后,切換啟動(dòng)開(kāi)關(guān)后,單板重新上電,啟動(dòng)FLASH上的uboot,如下圖所示: 
上面菜單中的選項(xiàng),首先要了解[k],下載linux內(nèi)核鏡像文件,下載內(nèi)核文件之前,我們需要先編譯得到linux內(nèi)核文件。
 
八、Linux內(nèi)核文件的原理、移植和編譯
1、Liinux內(nèi)核代碼移植
進(jìn)入工作目錄/opt/FriendlyARM/mini6410/linux 執(zhí)行,如下命令,生成生成linux-2.6.38 目錄,如下圖所示
#tar xvzf /tmp/linux/ linux-2.6.38-20110325.tar.gz 
 
2、Linux內(nèi)核代碼編譯,首先進(jìn)入linux-2.6.38 目錄,
 
【1】清除原有的配置文件和中間文件
#make distclean
 
【2】配置內(nèi)核,生成新的配置文件 .config
#make menuconfig ARCH=arm
Tiny6410開(kāi)發(fā)板已經(jīng)為我們準(zhǔn)備好了相關(guān)的配置文件,所以這一步可以省略。Tiny6410原配的是4.3寸的觸摸屏,所以使用config_mini6410_n43作為內(nèi)核編譯的配置文件。
 
【3】編譯內(nèi)核
#make uImage ARCH=arm CROSS_COMPILE=arm-linux-
輸入#make zImage,開(kāi)始編譯內(nèi)核,在arch/arm/boot 目錄下生成linux 內(nèi)核映象文件zImage。
 
將編譯得到的內(nèi)核鏡像文件zImage通過(guò)uboot下載到FLASH上運(yùn)行,
內(nèi)核在啟動(dòng)期間進(jìn)行的最后操作之一就是安裝根文件系統(tǒng),并讀取根文件系統(tǒng)中的配置文件,所以接下來(lái)我們要學(xué)習(xí)根文件系統(tǒng)。

 九、制作用于Linux內(nèi)核啟動(dòng)的根文件系統(tǒng)
1、根文件系統(tǒng)的作用和工作原理
    首先,根文件系統(tǒng)是Linux(或者說(shuō)是UNIX類(lèi))操作系統(tǒng)運(yùn)行時(shí)所需要的特有文件系統(tǒng)。根文件系統(tǒng)不僅具有普通文件系統(tǒng)的存儲(chǔ)數(shù)據(jù)文件的功能,還被操作系統(tǒng)用來(lái)存儲(chǔ)運(yùn)行時(shí)所需要的一些特殊文件。這些特殊文件包括:busybox (提供 shell 命令集)、配置文件(通常位于/etc目錄下用來(lái)初始化和布局你的文件系統(tǒng))、設(shè)備文件(位于/dev目錄下)、必要的庫(kù)文件。設(shè)備文件實(shí)際上保存著對(duì)應(yīng)設(shè)備的一些相關(guān)參數(shù),操作系統(tǒng)通過(guò)使用它們來(lái)與應(yīng)用程序進(jìn)行接口,并與設(shè)備進(jìn)行交互。因此根文件系統(tǒng)是Linux運(yùn)行時(shí)所必須的。
    另外,為了讓內(nèi)核文件的大小合適,不可能把所有的功能都編譯到內(nèi)核文件中,所以有些內(nèi)核需要的功能是以?xún)?nèi)核模塊的形式存在的(例如一些驅(qū)動(dòng)程序)。為了使內(nèi)核文件在運(yùn)行的時(shí)候可以找到并加載這些內(nèi)核模塊, 就需要將內(nèi)核模塊保存在根文件系統(tǒng)中。其實(shí)根文件系統(tǒng)就是一個(gè)普通的文件,它的制作過(guò)程是:
(1)按照Linux內(nèi)核要求,制作根文件系統(tǒng)的所需要的根目錄和子目錄,
(2)將內(nèi)核運(yùn)行需要的文件編譯并保存到正確的目錄,
(3)使用專(zhuān)門(mén)的工具將整個(gè)目錄轉(zhuǎn)換成合適的鏡像文件,這個(gè)文件可以直接燒寫(xiě)到存儲(chǔ)設(shè)備上去。
 
2、手動(dòng)創(chuàng)建根文件系統(tǒng)目錄和文件:這個(gè)工作和系統(tǒng)的存儲(chǔ)介質(zhì)無(wú)關(guān)
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin sys usr mnt tmp var
#mkdir usr/bin usr/lib usr/sbin lib/modules
(2)創(chuàng)建設(shè)備文件(如果不創(chuàng)建這兩個(gè)設(shè)備文件,在文件系統(tǒng)啟動(dòng)時(shí)會(huì)出現(xiàn)錯(cuò)誤信息,不能初始化控制臺(tái)。
#cd dev/
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
#cd.. 
 
(3)安裝/etc目錄
/etc目錄下是一些配置文件etc/inittab  etc/profile  etc/fstab etc/init.d/rcs和具體硬件無(wú)關(guān),各種機(jī)器上的這些配置文件大同小異可以復(fù)用。
因?yàn)檫@些配置文件和系統(tǒng)啟動(dòng)相關(guān),所以在學(xué)習(xí)配置文件之前,先簡(jiǎn)單了解一下系統(tǒng)的啟動(dòng)過(guò)程:
在linux內(nèi)核啟動(dòng)到start_kernel()函數(shù)的最后,通過(guò)調(diào)用init()函數(shù),創(chuàng)建第一個(gè)核心線程,核心線程主要進(jìn)行一些外設(shè)初始化工作,包括調(diào)用do_basic_setup()完成外設(shè)及其驅(qū)動(dòng)程序的加載和初始化,完成文件系統(tǒng)初始化和root文件系統(tǒng)的安裝。當(dāng)do_basic_setup()函數(shù)返回init(),init()又打開(kāi)了/dev/console設(shè)備,重定向三個(gè)標(biāo)準(zhǔn)的輸入輸出文件stdin、stdout和stderr到控制臺(tái),最后,搜索文件系統(tǒng)中的init程序(sbin目錄下的init文件,其實(shí)也是busybox文件)或者由init=命令行參數(shù)指定的程序,并使用 execve()系統(tǒng)調(diào)用加載執(zhí)行init程序。此時(shí)Linux完成內(nèi)核啟動(dòng),開(kāi)始運(yùn)行init程序,init程序需要讀取配置文件/etc/inittab。所以inittab是系統(tǒng)執(zhí)行的第一個(gè)配置文件。當(dāng) Busybox 的初始化程序執(zhí)行時(shí),首先試圖在/etc 下查找啟動(dòng)文件inittab,如果找到則按照inittab 文件定義的順序執(zhí)行;如果找不到inittab,則默認(rèn)執(zhí)行/etc/init.d/rcS 腳本,之后啟動(dòng)相應(yīng)的 shell。在 Busybox 的inittab 文件中,通常定義系統(tǒng)初始化時(shí)執(zhí)行的也是/etc/init.d/rcS 腳本。也就是說(shuō),無(wú)論inittab 文件的存在與否,Busybox 初始化時(shí),都會(huì)先執(zhí)行rcS 腳本。
所以,接下來(lái)我們需要學(xué)習(xí)的是:
1、inittab文件結(jié)構(gòu)
2、rcS腳本語(yǔ)法
 

inittab文件中每個(gè)登記項(xiàng)的結(jié)構(gòu)都是一樣的,分別以冒號(hào)“:”分隔的4個(gè)字段。具體如下: 
identifier :  run_level  :  action  :  process 
其中,各字段以及與其相關(guān)的說(shuō)明如下: 
identifier:登記項(xiàng)標(biāo)識(shí)符,最多為4個(gè)字符。用于惟一地標(biāo)識(shí)/etc/inittab文件中的每一個(gè)登記項(xiàng) 
run_level:系統(tǒng)運(yùn)行級(jí),即執(zhí)行登記項(xiàng)的init級(jí)別。用于指定相應(yīng)的登記項(xiàng)適用于哪一個(gè)運(yùn)行級(jí),即在哪一個(gè)運(yùn)行級(jí)中被處理。如果該字段為空,那么相應(yīng)的登記項(xiàng)將適用于所有的運(yùn)行級(jí)。在該字段中,可以同時(shí)指定一個(gè)或多個(gè)運(yùn)行級(jí),其中各運(yùn)行級(jí)分別以數(shù)字0.1.2.3.4.5.6或字母a、b、c表示,且無(wú)需對(duì)其進(jìn)行分隔。
action:動(dòng)作關(guān)鍵字。用于指定init進(jìn)程對(duì)相應(yīng)進(jìn)程(在“process”字段定義)所實(shí)施的動(dòng)作。具體動(dòng)作包括: 
               1、boot:
               2、bootwait:
               3、initdefault:
               4、off:
               5、once:
               6、ondemand:
               7、powerfail 
               8、powerwait 
               9、respawn 
              10、sysinit  
              11、wait:
process:所要執(zhí)行的shell命令。任何合法的shell語(yǔ)法均適用于該字段。

嵌入式Linux系統(tǒng)的inittab文件沒(méi)有運(yùn)行級(jí)別的概念,所以大致的內(nèi)容如下:
::sysinit:/etc/init.d/rcS                  ## 指定系統(tǒng)啟動(dòng)后首先執(zhí)行的文件
::respawn:-/bin/login -f root       ## 自動(dòng)作為root賬戶(hù)登錄
::askfirst:-/bin/sh                           ## 類(lèi)似respawn,它將會(huì)促使init在控制臺(tái)上顯示“Please press Enter to active this console”的信息,并在重新啟動(dòng)之前等待用戶(hù)按下enter
::ctrlaltdel:/sbin/reboot                ## 設(shè)置ctrl+alt+del鍵對(duì)應(yīng)的動(dòng)作(重啟文件系統(tǒng))
::shutdown:/bin/umount -a -r     ## 設(shè)置關(guān)機(jī)時(shí)對(duì)應(yīng)的動(dòng)作(卸載所有文件系統(tǒng))
::restart:/sbin/init                           ## 設(shè)置系統(tǒng)重啟時(shí)對(duì)應(yīng)的動(dòng)作(運(yùn)行的init程序)

創(chuàng)建etc/init.d/rcS文件:rcS文件是一個(gè)腳本文件,借助這個(gè)腳本可以設(shè)置各種程序開(kāi)機(jī)后自動(dòng)運(yùn)行,也可進(jìn)行其他系統(tǒng)設(shè)置,類(lèi)似于Windows系統(tǒng)中的自動(dòng)批處理文件。
#!/bin/sh     ## 符號(hào)#!用來(lái)告訴系統(tǒng)它后面的參數(shù)是用來(lái)執(zhí)行該文件的程序
PATH=/sbin:/bin:/usr/sbin:/usr/bin  ## 首先設(shè)置了PATH環(huán)境變量,只是為了后續(xù)命令使用方便
runlevel=S  
prevlevel=N  
umask 022  
  
export PATH runlevel prevlevel  
  
/bin/hostname zinix 
/bin/mount -n -t usbfs none /proc/bus/usb

echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/hotplug
# mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -p /dev/shm
注意最后還要改變它的屬性使它能夠執(zhí)行
 

 
 

創(chuàng)建etc/fstab文件:fstab文件描述系統(tǒng)中各種文件系統(tǒng)的信息,應(yīng)用程序讀取這個(gè)文件,然后根據(jù)其內(nèi)容進(jìn)行自動(dòng)掛載的工作
device   mount-point    type    options   dump   fsck order
文件中各字段的意義如下:
1)device:要掛接的設(shè)備,如/dev/mtdblockl;
2)mount-point:掛接點(diǎn);
3)type:文件系統(tǒng)類(lèi)型;
4)options:掛接參數(shù),以逗號(hào)隔開(kāi);
5)dump和fsck order:用來(lái)決定控制dump、fsck程序的行為。

創(chuàng)建用戶(hù)和組文件:
在etc目錄下增加passwd和group兩個(gè)文件。首先增加passwd文件,passwd一共由7個(gè)字段組成,6個(gè)冒號(hào)將其隔開(kāi)。其含義分別為:
1)用戶(hù)名;
2)是否有加密口令,x表示有,不填表示無(wú),采用MD5、DES加密;
3)用戶(hù)ID;
4)組ID;
5)注釋字段;
6)登錄目錄;
7)所使用的shell程序。
passwd的內(nèi)容為root:x:0:0:root:/root:/bin/sh
只有增加了passwd文件,啟動(dòng)以后命令行才會(huì)顯示[root@zinix /]# ,否則只會(huì)顯示[@zinix /]# 

group共由4個(gè)字段組成,3個(gè)冒號(hào)將其隔開(kāi)。含義分別為:
1)組名;
2)是否有加密口令,同passwd;
3)組ID;
4)指向各用戶(hù)名指針的數(shù)組。
/home/work/rootby/etc/group內(nèi)容如下:
root:x:0:

安裝glibc庫(kù) 

 在開(kāi)發(fā)板上需要加載器和動(dòng)態(tài)庫(kù),執(zhí)行如下幾個(gè)命令:

 $mkdir-p/home/work/rootby/lib 

 $cd/home/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib 

 $cp*.SO*/home/work/rootby/lib-d


(4)編譯內(nèi)核模塊

#make modules ARCH=arm CROSS_COMPILE=arm-linux-
(5)安裝內(nèi)核模塊
#make modules_install ARCH=arm INSTALL_MOD_PATH=/XXX/rootfs
 
3、使用BusyBox制作根文件系統(tǒng)
BusyBox的作用與原理:根文件系統(tǒng)的目錄下面除了放置內(nèi)核運(yùn)行需要的內(nèi)核模塊文件以外,還需要放置提供給用戶(hù)使用的系統(tǒng)命令,例如:ls、cat之類(lèi)。這些命令如果重頭開(kāi)發(fā)就太沒(méi)意思了,所以有人搞了個(gè)busybox,這玩意編譯完以后其實(shí)也就是一個(gè)應(yīng)用程序,但是它實(shí)現(xiàn)了Linux系統(tǒng)大部分的命令(它的編譯也需要使用make menuconifg命令生成指導(dǎo)編譯的配置文件),將編譯得到的busybox文件放置到根文件系統(tǒng)特定的目錄,然后再建立一些軟連接,這樣面向用戶(hù)的Linux系統(tǒng)命令就移植完成了。
bsuybox的編譯視頻:

打開(kāi)busybox自帶的FTP服務(wù)器:
方案1:在bin目錄下創(chuàng)建軟鏈接:ln -s busybox tcpsvd
              這個(gè)tcpsvd就可以啟動(dòng)ftp服務(wù)器。然后輸入命令:#tcpsvd 0 21 ftpd -w / &
      // 上面的0表示對(duì)所有ip地址都進(jìn)行偵聽(tīng)
      // 21指定ftp服務(wù)器的默認(rèn)端口
      // ftpd -w這里的參數(shù)-w表示client可以對(duì)目錄執(zhí)行寫(xiě)操作
      // 可以使用-t和-T參數(shù)設(shè)置client在沒(méi)有任何操作的最大時(shí)間之后ftpd主動(dòng)斷開(kāi)client連接
      // 默認(rèn)-t為2分鐘=2 * 60,-T為1小時(shí)=1 * 60 * 60
             // / ftp服務(wù)器開(kāi)發(fā)的目錄
      // 表示啟用一個(gè)新的進(jìn)程運(yùn)行FTP服務(wù)器,否則當(dāng)前shell被阻塞,直到下發(fā)Ctrl+c
設(shè)置以后,在IE瀏覽器輸入:ftp://192.168.1.230/,可以訪問(wèn)單板上的 / 目錄。

方案2:設(shè)置inetd.conf,并運(yùn)行inetd。不知什么原因,暫時(shí)沒(méi)搞定這個(gè)方案。

4、使用Initramfs制作根文件系統(tǒng)
【1】首先要通過(guò)make menuconfig ARCH=arm 配置Linux內(nèi)核,
  General Setup -> Initial RAM filesystem and RAM disk
【2】再選擇創(chuàng)建好的根文件系統(tǒng)目錄所在的路徑:xxx/rootfs
【3】在根文件系統(tǒng)目錄建立一個(gè)軟連接:ln -s ./bin/busybox init
【4】重新編譯內(nèi)核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
【5】將編譯好的內(nèi)核文件下載到設(shè)備上運(yùn)行即可(配置了Initramfs,編譯得到的內(nèi)核文件uImage比正常情況下大,因?yàn)閮?nèi)核文件已經(jīng)包含了根文件系統(tǒng))
 
5、使用NFS文件系統(tǒng)
在調(diào)試階段,需要頻繁的修改應(yīng)用程序,每次都把編譯好的文件下載到FLASH上進(jìn)行調(diào)試并不是一個(gè)好主意(FLASH有壽命且下載時(shí)間也比較長(zhǎng)),而使用NFS(網(wǎng)絡(luò)文件系統(tǒng))是一個(gè)好方法。所以接下來(lái)我們要重點(diǎn)介紹uboot啟動(dòng)菜單中的選項(xiàng)
通過(guò)命令可以設(shè)置網(wǎng)絡(luò)啟動(dòng)參數(shù):
nfsroot 是連接6410開(kāi)發(fā)板的Linux主機(jī)的IP 地址,如果你使用了虛擬機(jī),該地址是虛擬機(jī)中Fedora9 的IP 地址,也就是直接提供NFS 服務(wù)的Linux 系統(tǒng)IP 地址。
這里我機(jī)器使用的IP地址是192.168.1.200。
“ip=”后面:
第一項(xiàng)(192.168.1.230)是目標(biāo)板的臨時(shí)IP(注意不要和局域網(wǎng)內(nèi)其他IP 沖突);
第二項(xiàng)(192.168.1.200)是開(kāi)發(fā)主機(jī)的IP;
第三項(xiàng)(192.168.1.200)是目標(biāo)板上網(wǎng)關(guān)(GW)的設(shè)置;
第四項(xiàng)(255.255.255.0)是子網(wǎng)掩碼;
第五項(xiàng)是開(kāi)發(fā)主機(jī)的名字(一般無(wú)關(guān)緊要,可隨便填寫(xiě))
eth0 是網(wǎng)卡設(shè)備的名稱(chēng)
 
介紹完之后,再輸入[q],進(jìn)入uboot的shell界面,如下圖所示,輸入help,可以查看shell下的所有命令。 
 
例如,輸入bdinfo命令,可以查看單板信息: 
 
輸入printenv命令可以查詢(xún)系統(tǒng)內(nèi)部的環(huán)境變量,包括啟動(dòng)參數(shù) 

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:354174 發(fā)表于 2018-6-19 11:40 | 只看該作者
太感謝了,太有用了,作為一個(gè)超級(jí)小白,難得的好資料。謝謝!
回復(fù)

使用道具 舉報(bào)

板凳
ID:886296 發(fā)表于 2021-11-4 13:02 | 只看該作者
寫(xiě)很詳細(xì)了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精选在线观看 | 高清一区二区 | 三级免费观看 | 欧美在线天堂 | www.久久久久| 91蜜桃在线观看 | 久久久久久久免费视频 | 四虎影视最新地址 | 91狠狠操| 9999精品视频 | av一区二区在线观看 | 亚洲影院在线 | 免费看毛片的网站 | 高潮毛片又色又爽免费 | 综合久久网 | 一区二区三区中文字幕 | 欧美第一页| 亚洲一区国产 | 欧美一级淫片免费视频魅影视频 | 国产黄在线观看 | 欧美激情综合 | 成人激情在线观看 | 欧美一区二区三区免费 | 亚洲做受高潮无遮挡 | 日韩中文av | 国产一区二区视频在线观看 | 精品福利在线观看 | 狠狠做| 欧美成年人视频 | 久久99热这里只频精品6学生 | 中文字幕在线免费观看视频 | 亚洲最大黄色网址 | 国产做爰免费观看视频 | 天天天天躁天天爱天天碰2018 | 国产精品美女久久久 | 欧美国产一区二区 | 亚洲天堂网在线观看 | 久久视频在线免费观看 | 亚洲免费久久 | 四虎黄色影院 | 亚洲精品资源 |