




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)主要內(nèi)容Bootloader引導(dǎo)程序引導(dǎo)程序 Linux的移植的移植 驅(qū)動(dòng)程序開(kāi)發(fā)驅(qū)動(dòng)程序開(kāi)發(fā) 應(yīng)用程序開(kāi)發(fā)應(yīng)用程序開(kāi)發(fā) 3第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.1.1 7.1.1 BootloaderBootloader的啟動(dòng)過(guò)程的啟動(dòng)過(guò)程 BootLoader的實(shí)現(xiàn)依賴于的實(shí)現(xiàn)依賴于CPU的體系結(jié)構(gòu),因此大多的體系結(jié)構(gòu),因此大多數(shù)數(shù)BootLoader都分為都分為stage1和和stage2兩大部分。兩大部分。 BootLoader的的stage1通常包括以下步驟:通常包括以下步驟:硬件設(shè)備初
2、始化。硬件設(shè)備初始化。為加載為加載BootLoader的的stage2準(zhǔn)備準(zhǔn)備RAM空間??臻g。復(fù)制復(fù)制BootLoader的的stage2到到RAM空間中??臻g中。設(shè)置好堆棧。設(shè)置好堆棧。跳轉(zhuǎn)到跳轉(zhuǎn)到stage2的入口點(diǎn)。的入口點(diǎn)。 BootLoader的的stage2通常包括以下步驟:通常包括以下步驟:初始化本階段要使用的硬件設(shè)備。初始化本階段要使用的硬件設(shè)備。檢測(cè)系統(tǒng)內(nèi)存映射。檢測(cè)系統(tǒng)內(nèi)存映射。將將kernel映像和根文件系統(tǒng)映像從映像和根文件系統(tǒng)映像從Flash讀到讀到RAM中。中。為內(nèi)核設(shè)置啟動(dòng)參數(shù)。為內(nèi)核設(shè)置啟動(dòng)參數(shù)。調(diào)用內(nèi)核。調(diào)用內(nèi)核。4第第7 7章章 嵌入式嵌入式LinuxLi
3、nux軟件設(shè)計(jì)軟件設(shè)計(jì) 啟動(dòng)加載模式:這種模式也稱為自主模式(Autonomous)模式,即Bootloader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到ARM中運(yùn)行,整個(gè)過(guò)程沒(méi)有用戶的介入。這種模式是Bootloader的正常工作狀態(tài)。在嵌入式產(chǎn)品發(fā)布時(shí),bootloader必須工作在這種模式下。 下載模式:目標(biāo)機(jī)上的Bootloader通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)上下載文件,比如下載應(yīng)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從主機(jī)上下載的文件通常首先被bootloader保存在目標(biāo)機(jī)的RAM中,然后在被Bootloader寫到目標(biāo)機(jī)上的固態(tài)存儲(chǔ)設(shè)備中。這種模式主要用在系統(tǒng)更新時(shí)。5第第
4、7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) U-boot U-boot是德國(guó)DENX小組開(kāi)發(fā)的用于多種嵌入式CPU的Bootloader程序,它可以運(yùn)行在基于PowerPC、ARM、MIPS等多種嵌入式開(kāi)發(fā)板上。 http:/u- ftp:/ftp.denx.de/pub/u-boot/6第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) Blob Blob是Boot loader Object的縮寫,是一款功能強(qiáng)大的Bootloader。最初由Jan-Derk Bakker和Erik Mouw寫的,現(xiàn)移植到很多基于ARM的CPU上。 http:/ 7章章 嵌入
5、式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) ARMboot 是一個(gè)以ARM或Strong ARM為內(nèi)核CPU的嵌入式系統(tǒng)的Bootloader,該軟件的目標(biāo)是使新的平臺(tái)更容易被移植并盡可能地發(fā)揮其強(qiáng)大的性能。 http:/ 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) RedBoot 最初由Redhat開(kāi)發(fā),集bootloader、調(diào)試、flash燒寫于一體,支持串口、網(wǎng)絡(luò)下載,執(zhí)行可執(zhí)行應(yīng)用程序。 /redboot/9第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.1.2 7.1.2 BootloaderBootlo
6、ader之之vivivivi vivi是由韓國(guó)是由韓國(guó)MIZI公司提供的一款針對(duì)公司提供的一款針對(duì)S3C2410芯片的芯片的BootLoader。 vivi的啟動(dòng)過(guò)程分為兩個(gè)階段:階段的啟動(dòng)過(guò)程分為兩個(gè)階段:階段1和階段和階段2。階段階段1的主要工作是:的主要工作是:硬件初始化;硬件初始化;配置串口;配置串口;復(fù)制自身到復(fù)制自身到SDRAM中中(跳轉(zhuǎn)到跳轉(zhuǎn)到C代碼的入口函數(shù)代碼的入口函數(shù))。 階段階段2的主要工作是:的主要工作是:對(duì)硬件系統(tǒng)繼續(xù)初始化;對(duì)硬件系統(tǒng)繼續(xù)初始化;內(nèi)存映射初始化,內(nèi)存管理單元內(nèi)存映射初始化,內(nèi)存管理單元MMU初始化;初始化;初始化堆;初始化堆;初始化初始化MTD設(shè)備,
7、設(shè)備,MTD設(shè)備指具有閃存功能的設(shè)備,如閃存芯片、閃設(shè)備指具有閃存功能的設(shè)備,如閃存芯片、閃存卡等;存卡等;初始化私有數(shù)據(jù);初始化私有數(shù)據(jù);初始化內(nèi)置命令;初始化內(nèi)置命令;啟動(dòng)啟動(dòng)vivi。10第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)主要內(nèi)容Bootloader引導(dǎo)程序引導(dǎo)程序 Linux的移植的移植 驅(qū)動(dòng)程序開(kāi)發(fā)驅(qū)動(dòng)程序開(kāi)發(fā) 應(yīng)用程序開(kāi)發(fā)應(yīng)用程序開(kāi)發(fā) 11第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.2 7.2 LinuxLinux的移植的移植 所謂所謂Linux移植,就是針對(duì)具體的目標(biāo)平臺(tái)對(duì)移植,就是針對(duì)具體的目標(biāo)平臺(tái)對(duì)Linux做必要做必要
8、的改寫后,安裝到該目標(biāo)平臺(tái)并使其正確運(yùn)行的過(guò)程?;镜母膶懞?,安裝到該目標(biāo)平臺(tái)并使其正確運(yùn)行的過(guò)程?;緝?nèi)容包括:內(nèi)容包括:獲取某一版本的獲取某一版本的Linux內(nèi)核源碼。內(nèi)核源碼。 /pub/linux/kernel/v2.6/ 根據(jù)具體的目標(biāo)平臺(tái),對(duì)源碼進(jìn)行必要的改寫(主要是修改根據(jù)具體的目標(biāo)平臺(tái),對(duì)源碼進(jìn)行必要的改寫(主要是修改有關(guān)體系結(jié)構(gòu)的部分),然后添加一些驅(qū)動(dòng),打造一款適合有關(guān)體系結(jié)構(gòu)的部分),然后添加一些驅(qū)動(dòng),打造一款適合目標(biāo)平臺(tái)的新的操作系統(tǒng)。目標(biāo)平臺(tái)的新的操作系統(tǒng)。對(duì)該系統(tǒng)進(jìn)行針對(duì)目標(biāo)平臺(tái)的交叉編譯,生成一個(gè)內(nèi)核映像對(duì)該系統(tǒng)進(jìn)行針對(duì)目標(biāo)
9、平臺(tái)的交叉編譯,生成一個(gè)內(nèi)核映像文件。文件。將該映像文件燒寫、安裝到目標(biāo)平臺(tái)中。將該映像文件燒寫、安裝到目標(biāo)平臺(tái)中。 12第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.2.1 7.2.1 LinuxLinux內(nèi)核的目錄結(jié)構(gòu)內(nèi)核的目錄結(jié)構(gòu) 1 1/ /archarch:其中的子目錄包含了所有與硬件體系結(jié)構(gòu)相關(guān)的內(nèi)核移植代碼。每一其中的子目錄包含了所有與硬件體系結(jié)構(gòu)相關(guān)的內(nèi)核移植代碼。每一個(gè)目錄都代表一種硬件平臺(tái),對(duì)于每種平臺(tái)都應(yīng)該包括:個(gè)目錄都代表一種硬件平臺(tái),對(duì)于每種平臺(tái)都應(yīng)該包括: boot: boot:包含啟動(dòng)內(nèi)核所使用的部分或全部平臺(tái)的相關(guān)代碼。包含啟動(dòng)內(nèi)核所使用
10、的部分或全部平臺(tái)的相關(guān)代碼。 kernel: kernel:包含支持體系結(jié)構(gòu)特有的特征代碼。包含支持體系結(jié)構(gòu)特有的特征代碼。 lib lib:包含存放體系結(jié)構(gòu)特有的通用函數(shù)的實(shí)現(xiàn)代碼。包含存放體系結(jié)構(gòu)特有的通用函數(shù)的實(shí)現(xiàn)代碼。 mm: mm: 包含存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實(shí)現(xiàn)。包含存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實(shí)現(xiàn)。 mach-xxx: mach-xxx:包含存放該處理器的移植代碼。包含存放該處理器的移植代碼。2 2/ /DocumentationDocumentation:其中的子目錄包含有關(guān)內(nèi)核的許多非常詳細(xì)的文檔。其中的子目錄包含有關(guān)內(nèi)核的許多非常詳細(xì)的文檔。3 3/ /dri
11、versdrivers:其中的子目錄包含內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序。其中的子目錄包含內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序。4 4/ /fsfs:其中的子目錄包含了所有文件系統(tǒng)的代碼。其中的子目錄包含了所有文件系統(tǒng)的代碼。5 5/ /includeinclude:其中的子目錄包含了建立內(nèi)核代碼時(shí)所需的大部分庫(kù)文件的頭文其中的子目錄包含了建立內(nèi)核代碼時(shí)所需的大部分庫(kù)文件的頭文件,該模塊利用其他模塊重建內(nèi)核。同時(shí),包括不同平臺(tái)需要的庫(kù)文件。件,該模塊利用其他模塊重建內(nèi)核。同時(shí),包括不同平臺(tái)需要的庫(kù)文件。6 6/ /initinit:其中的子目錄包含了內(nèi)核的初始化代碼,內(nèi)核從此目錄下開(kāi)始工作。其中的子目錄包含了內(nèi)核
12、的初始化代碼,內(nèi)核從此目錄下開(kāi)始工作。7 7/ /ipcipc:其中的子目錄包含了內(nèi)核的進(jìn)程間通訊的代碼。其中的子目錄包含了內(nèi)核的進(jìn)程間通訊的代碼。8 8/ /kernelkernel:其中的子目錄包含了主內(nèi)核的代碼,如進(jìn)程調(diào)度等。其中的子目錄包含了主內(nèi)核的代碼,如進(jìn)程調(diào)度等。9 9/ /liblib:其中的子目錄包含了通用的庫(kù)函數(shù)代碼等。其中的子目錄包含了通用的庫(kù)函數(shù)代碼等。1010/ /mmmm:其中的子目錄包含了內(nèi)核的內(nèi)存管理代碼。其中的子目錄包含了內(nèi)核的內(nèi)存管理代碼。1111/ /netnet:其中的子目錄包含了內(nèi)核的網(wǎng)絡(luò)相關(guān)代碼。其中的子目錄包含了內(nèi)核的網(wǎng)絡(luò)相關(guān)代碼。1212/ /s
13、criptsscripts:其中的子目錄包含了配置內(nèi)核的一些腳本文件。其中的子目錄包含了配置內(nèi)核的一些腳本文件。13第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.2.2 7.2.2 LinuxLinux內(nèi)核源碼內(nèi)核源碼 通常對(duì)內(nèi)核源碼的改寫難度較大,因?yàn)檫@不僅要求對(duì)內(nèi)核結(jié)構(gòu)非常通常對(duì)內(nèi)核源碼的改寫難度較大,因?yàn)檫@不僅要求對(duì)內(nèi)核結(jié)構(gòu)非常熟悉,而且也要對(duì)目標(biāo)平臺(tái)的硬件結(jié)構(gòu)相當(dāng)了解。所以這部分工作主熟悉,而且也要對(duì)目標(biāo)平臺(tái)的硬件結(jié)構(gòu)相當(dāng)了解。所以這部分工作主要由目標(biāo)平臺(tái)廠商提供,如對(duì)于要由目標(biāo)平臺(tái)廠商提供,如對(duì)于ARMARM平臺(tái),對(duì)平臺(tái),對(duì)LinuxLinux內(nèi)核源碼的改寫就
14、內(nèi)核源碼的改寫就是由英國(guó)是由英國(guó)ARMARM公司完成的。對(duì)于讀者來(lái)說(shuō),只需從其網(wǎng)站上下載相關(guān)公司完成的。對(duì)于讀者來(lái)說(shuō),只需從其網(wǎng)站上下載相關(guān)版本的版本的LinuxLinux內(nèi)核補(bǔ)丁,再安裝補(bǔ)丁即可。內(nèi)核補(bǔ)丁,再安裝補(bǔ)丁即可。 14第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.2.3 7.2.3 交叉編譯環(huán)境的建立交叉編譯環(huán)境的建立 交叉編譯交叉編譯指利用運(yùn)行在機(jī)器上的編譯器編譯某個(gè)源程序,指利用運(yùn)行在機(jī)器上的編譯器編譯某個(gè)源程序,生成在另一臺(tái)機(jī)器上運(yùn)行的目標(biāo)代碼的過(guò)程。生成在另一臺(tái)機(jī)器上運(yùn)行的目標(biāo)代碼的過(guò)程。對(duì)于對(duì)于LinuxLinux系統(tǒng)和系統(tǒng)和ARMARM平臺(tái)來(lái)講,
15、平臺(tái)來(lái)講,GCCGCC交叉編譯器能高效的交叉編譯器能高效的完成移植,下面介紹生成完成移植,下面介紹生成GCCGCC交叉編譯器的一般過(guò)程。交叉編譯器的一般過(guò)程。(1 1)下載源代碼)下載源代碼 (2 2)編譯)編譯binutilsbinutils (3 3)配置)配置LinuxLinux內(nèi)核頭文件內(nèi)核頭文件 (4 4)第一次編譯)第一次編譯gccgcc (5 5)交叉編譯)交叉編譯glibcglibc(6 6)第二次編譯)第二次編譯gccgcc 15第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.2.4 7.2.4 修改修改LinuxLinux內(nèi)核文件內(nèi)核文件 1 1設(shè)置目
16、標(biāo)平臺(tái)和指定交叉編譯器設(shè)置目標(biāo)平臺(tái)和指定交叉編譯器 2 2修改修改arch/armarch/arm目錄下目錄下MakefileMakefile文件文件 3 3修改修改arch/armarch/arm目錄下目錄下config.inconfig.in文件文件 4 4修改修改arch/arm/bootarch/arm/boot目錄下目錄下MakefileMakefile文件文件 5 5修改修改arch/arm/boot/compressedarch/arm/boot/compressed目錄下目錄下MakefileMakefile文件文件 6 6在在arch/arm/boot/compresseda
17、rch/arm/boot/compressed目錄下添加目錄下添加head-head-s3c2410.ss3c2410.s文件,該文件主要用來(lái)初始化處理器。文件,該文件主要用來(lái)初始化處理器。7 7在在arch/arm/def-arch/arm/def-configsconfigs目錄下添加配置好的目錄下添加配置好的S3C2410S3C2410的配置文件。的配置文件。8 8修改修改arch/arm/kernelarch/arm/kernel目錄下目錄下MakefileMakefile文件文件9 9修改修改arch/arm/kernelarch/arm/kernel目錄下的目錄下的debug-de
18、bug-armv.sarmv.s文件文件 1010修改修改arch/arm/kernelarch/arm/kernel目錄下的目錄下的entry-entry-armv.sarmv.s文件文件 1111修改修改arch/arm/mmarch/arm/mm目錄下的相關(guān)文件目錄下的相關(guān)文件 1212修改修改arch/arm/mach-s3c2410arch/arm/mach-s3c2410目錄下的相關(guān)文件目錄下的相關(guān)文件 16第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.2.5 7.2.5 LinuxLinux內(nèi)核及文件系統(tǒng)的編譯內(nèi)核及文件系統(tǒng)的編譯 1 1編譯編譯Linux
19、Linux內(nèi)核內(nèi)核 make make depdepmake cleanmake cleanmake make zImagezImage 2 2制作制作cramfscramfs文件系統(tǒng)文件系統(tǒng) 利用工具軟件利用工具軟件MKCRAMFSMKCRAMFS制作制作cramfscramfs文件系統(tǒng)。文件系統(tǒng)。 假設(shè)假設(shè)root_techroot_tech目錄包含將來(lái)要用到的所有文件,把制目錄包含將來(lái)要用到的所有文件,把制作工具和作工具和root_techroot_tech放在同一個(gè)目錄下,并在該目錄下使用放在同一個(gè)目錄下,并在該目錄下使用命令:命令: MKCRAMFS root_tech MKCRAM
20、FS root_tech rootfs.cramfsrootfs.cramfs 17第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì) 7.2.6 7.2.6 LinuxLinux內(nèi)核及文件系統(tǒng)的下載內(nèi)核及文件系統(tǒng)的下載 1 1利用利用vivivivi通過(guò)超級(jí)終端重新下載通過(guò)超級(jí)終端重新下載vivivivi vivivivi load flash load flash vivivivi x x 2 2利用利用vivivivi燒寫內(nèi)核和燒寫內(nèi)核和rootroot文件系統(tǒng)文件系統(tǒng) vivivivi load flash kernel x load flash kernel x viv
21、ivivi load flash root x load flash root x 3 3利用網(wǎng)絡(luò)燒寫軟件利用網(wǎng)絡(luò)燒寫軟件imagewriteimagewrite燒寫內(nèi)核和燒寫內(nèi)核和rootroot文件系統(tǒng)文件系統(tǒng) ././imagewriteimagewrite /dev/mtd/0 vivi:0 /dev/mtd/0 vivi:0././imagewriteimagewrite /dev/mtd/0 zImage:192k /dev/mtd/0 zImage:192k././imagewriteimagewrite /dev/mtd/0 root.cramfs:2m /dev/mtd/0
22、root.cramfs:2m18第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)主要內(nèi)容Bootloader引導(dǎo)程序引導(dǎo)程序 Linux的移植的移植 驅(qū)動(dòng)程序開(kāi)發(fā)驅(qū)動(dòng)程序開(kāi)發(fā) 應(yīng)用程序開(kāi)發(fā)應(yīng)用程序開(kāi)發(fā) 19第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)v 設(shè)備驅(qū)動(dòng)程序的工作原理設(shè)備驅(qū)動(dòng)程序的工作原理 設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口。設(shè)設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié), 應(yīng)用程序可以像應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。操作普通文件一樣對(duì)硬件設(shè)
23、備進(jìn)行操作。 設(shè)備驅(qū)動(dòng)程序作為內(nèi)核的一部分設(shè)備驅(qū)動(dòng)程序作為內(nèi)核的一部分,完成以下功能完成以下功能:對(duì)設(shè)備初始化和釋放;對(duì)設(shè)備初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);求的數(shù)據(jù);檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。 Linux下的設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分下的設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,運(yùn)行在內(nèi)核模運(yùn)行在內(nèi)核模式。在式。在Linux系統(tǒng)中,使用系統(tǒng)中,使用file_operation結(jié)構(gòu)結(jié)構(gòu)將設(shè)備驅(qū)動(dòng)將設(shè)備驅(qū)動(dòng)程序和文件系統(tǒng)
24、相關(guān)聯(lián)程序和文件系統(tǒng)相關(guān)聯(lián),在這個(gè)結(jié)構(gòu)里存放了設(shè)備各種操作在這個(gè)結(jié)構(gòu)里存放了設(shè)備各種操作的入口函數(shù)。的入口函數(shù)。 20第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)v LinuxLinux下設(shè)備驅(qū)動(dòng)程序在輸入下設(shè)備驅(qū)動(dòng)程序在輸入/ /輸出系統(tǒng)中的地位輸出系統(tǒng)中的地位用戶程序的進(jìn)程用戶程序的進(jìn)程(設(shè)備)文件系統(tǒng)(設(shè)備)文件系統(tǒng)設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序設(shè)備服務(wù)子程序設(shè)備服務(wù)子程序中斷處理程序中斷處理程序物理設(shè)備控制器物理設(shè)備控制器輸入輸入/輸出輸出請(qǐng)求請(qǐng)求輸入輸入/輸出輸出響應(yīng)響應(yīng)物理設(shè)備物理設(shè)備21第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)v 驅(qū)動(dòng)程序的開(kāi)
25、發(fā)和使用步驟驅(qū)動(dòng)程序的開(kāi)發(fā)和使用步驟 1 1用戶在自己的驅(qū)動(dòng)程序源文件中定義用戶在自己的驅(qū)動(dòng)程序源文件中定義file_operationsfile_operations結(jié)構(gòu)結(jié)構(gòu), ,并編寫并編寫出設(shè)備需要的各個(gè)操作函數(shù),對(duì)于設(shè)備不需要的操作函數(shù)用出設(shè)備需要的各個(gè)操作函數(shù),對(duì)于設(shè)備不需要的操作函數(shù)用NULLNULL初始化;初始化; 2 2定義一個(gè)初始化函數(shù),該函數(shù)應(yīng)包含以下幾項(xiàng)工作:定義一個(gè)初始化函數(shù),該函數(shù)應(yīng)包含以下幾項(xiàng)工作:(1 1)對(duì)使用到的硬件寄存器進(jìn)行初始化,包括中斷寄存器。)對(duì)使用到的硬件寄存器進(jìn)行初始化,包括中斷寄存器。(2 2)初始化與設(shè)備相關(guān)的參數(shù)。)初始化與設(shè)備相關(guān)的參數(shù)。(
26、3 3)注冊(cè)設(shè)備。)注冊(cè)設(shè)備。 intint register_chrdev(unsignedregister_chrdev(unsigned int,constint,const char char* *, ,structstruct file_operations file_operations* *) )其中三個(gè)參數(shù)分別代表主設(shè)備號(hào)、設(shè)備名和其中三個(gè)參數(shù)分別代表主設(shè)備號(hào)、設(shè)備名和file_operationsfile_operations結(jié)構(gòu)變量結(jié)構(gòu)變量的地址的地址。(4 4)注冊(cè)設(shè)備使用的中斷。注冊(cè)中斷使用的函數(shù)。)注冊(cè)設(shè)備使用的中斷。注冊(cè)中斷使用的函數(shù)。 (5 5)其他的一些初始化工
27、作,比如給設(shè)備分配)其他的一些初始化工作,比如給設(shè)備分配I/OI/O,申請(qǐng)申請(qǐng)DMADMA通道等。通道等。 3 3將設(shè)備驅(qū)動(dòng)加到將設(shè)備驅(qū)動(dòng)加到LinuxLinux內(nèi)核中內(nèi)核中 4 4將設(shè)備驅(qū)動(dòng)編譯成驅(qū)動(dòng)模塊將設(shè)備驅(qū)動(dòng)編譯成驅(qū)動(dòng)模塊 22第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)主要內(nèi)容Bootloader引導(dǎo)程序引導(dǎo)程序 Linux的移植的移植 驅(qū)動(dòng)程序開(kāi)發(fā)驅(qū)動(dòng)程序開(kāi)發(fā) 應(yīng)用程序開(kāi)發(fā)應(yīng)用程序開(kāi)發(fā) 23第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)v 應(yīng)用程序的開(kāi)發(fā)步驟應(yīng)用程序的開(kāi)發(fā)步驟 開(kāi)發(fā)開(kāi)發(fā)Linux應(yīng)用程序一般分為以下幾個(gè)步驟:應(yīng)用程序一般分為以下幾個(gè)步驟:編寫程序編寫程序編寫編寫Makefile文件文件編譯程序編譯程序運(yùn)行程序運(yùn)行程序?qū)⑸傻目蓤?zhí)行文件加入文件系統(tǒng)。將生成的可執(zhí)行文件加入文件系統(tǒng)。 如果應(yīng)用程序的運(yùn)行需要某些驅(qū)動(dòng)程序,先將驅(qū)動(dòng)程序如果應(yīng)用程序的運(yùn)行需要某些驅(qū)動(dòng)程序,先將驅(qū)動(dòng)程序掛接到文件系統(tǒng)中。掛接到文件系統(tǒng)中。 24第第7 7章章 嵌入式嵌入式LinuxLinux軟件設(shè)計(jì)軟件設(shè)計(jì)v 舉例:舉例:hellohello應(yīng)用程序的開(kāi)發(fā)和運(yùn)行應(yīng)用程序的開(kāi)發(fā)和運(yùn)行 1. 1. 編
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效辦公空間運(yùn)營(yíng)策略書(shū)
- 錯(cuò)誤處理機(jī)制增強(qiáng)穩(wěn)定性
- 雙方離婚子女歸女方協(xié)議書(shū)
- 公司員工加班申請(qǐng)記錄表
- 勞動(dòng)合同業(yè)務(wù)員勞動(dòng)合同
- 培訓(xùn)場(chǎng)地出租合同
- 各行業(yè)專利申請(qǐng)數(shù)量統(tǒng)計(jì)表
- 農(nóng)民合作社經(jīng)營(yíng)模式方案
- 亮化工程合同
- 2025年合肥從業(yè)資格證模擬考試試題
- 叉車裝卸區(qū)域安全風(fēng)險(xiǎn)告知牌
- 2022屆江蘇省南京師范大學(xué)附屬中學(xué)高三(下)考前最后一模物理試題(解析版)
- 辦公用品供貨服務(wù)計(jì)劃方案
- 《普通生物學(xué)教案》word版
- 貴州省就業(yè)失業(yè)登記表
- 預(yù)防電信詐騙網(wǎng)絡(luò)詐騙講座PPT幻燈片課件
- 反興奮劑知識(shí)試題及答案
- 初中八年級(jí)上冊(cè)音樂(lè)課件4.2欣賞沃爾塔瓦河(14張)ppt課件
- 人教版五年級(jí)數(shù)學(xué)下冊(cè)每個(gè)單元教材分析(共九個(gè)單元)
- 深圳氫燃料共享單車項(xiàng)目投資計(jì)劃書(shū)【參考范文】
- 主要腸內(nèi)營(yíng)養(yǎng)制劑成分比較
評(píng)論
0/150
提交評(píng)論