嵌入式Linux系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)手冊(cè)_第1頁(yè)
嵌入式Linux系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)手冊(cè)_第2頁(yè)
嵌入式Linux系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)手冊(cè)_第3頁(yè)
嵌入式Linux系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)手冊(cè)_第4頁(yè)
嵌入式Linux系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式Linux系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)指導(dǎo)手冊(cè)實(shí)驗(yàn)一 BootLoader實(shí)驗(yàn)1、 實(shí)驗(yàn)?zāi)康?#216; 了解BootLoader在嵌入式系統(tǒng)中的作用Ø 掌握在BootLoader增加一個(gè)功能的流程2、 實(shí)驗(yàn)內(nèi)容Ø 向BootLoader增加一個(gè)簡(jiǎn)單的功能模塊(如跑馬燈,A/D接口實(shí)驗(yàn)等)3、 實(shí)驗(yàn)設(shè)備(略)4、 實(shí)驗(yàn)原理(參考FS2410P實(shí)驗(yàn)指導(dǎo)手冊(cè)v2.1.2.pdf 285-292頁(yè)及文檔“BootLoader編寫(xiě)指 南”)5、 實(shí)驗(yàn)步驟(參考FS2410P實(shí)驗(yàn)指導(dǎo)手冊(cè)v2.1.2.pdf 287-288頁(yè))實(shí)驗(yàn)二 Linux的安裝與基本操作實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?#216; 在P

2、C機(jī)上安裝Linux操作系統(tǒng)Ø 熟悉常用Linux命令和操作Ø 了解Linux環(huán)境下基于GCC的C程序開(kāi)發(fā)流程二、實(shí)驗(yàn)內(nèi)容 1、安裝Linux操作系統(tǒng)不在實(shí)驗(yàn)室進(jìn)行該項(xiàng)實(shí)驗(yàn)內(nèi)容,自行在個(gè)人電腦上安裝,請(qǐng)參考文檔“Linux系統(tǒng)簡(jiǎn)介與安裝”。 2、常用Linux命令和操作(更多Linux命令和操作方法,請(qǐng)參考文檔“Linux命令大集合”)Ø 登錄Linux系統(tǒng) 用戶:root 口令:123456 輸入上面的用戶名和口令,從而登錄Linux操作系統(tǒng)。Ø 目錄操作 查看主目錄 輸入pwd命令,會(huì)顯示你所在的主目錄。如:/home/arm 以長(zhǎng)格式查看主目錄下有

3、哪些目錄和文件 輸入ls -l命令,會(huì)顯示主目錄下所有的文件,包括文件的屬性,大小,創(chuàng)建時(shí)間等。Ø 文件操作 新建一個(gè)空文件,查看其屬性信息; 輸入touch test命令,創(chuàng)建名為test的空文件;輸入touch test1命令,創(chuàng)建名為test1的空文件; 再輸入ls -l命令,查看剛剛所建文件的屬性,屬性值為-rw-rw-r-。 用chmod 777 更改該文件屬性,更改后再查看屬性信息; 輸入chmod 777 test命令, 更改該文件屬性; 再輸入ls -l命令,查看更改文件屬性后的文件屬性,屬性值為-rwxrwxrwx。 刪除該文件。 輸入rm test命令,刪除tes

4、t文件; 再輸入用ls -l命令查看,確認(rèn)刪除成功。Ø 拷貝操作 在主目錄下新建一子目錄hello; 輸入mkdir hello命令,創(chuàng)建hello目錄; 用ls -l命令查看,確認(rèn)創(chuàng)建成功。 將之前創(chuàng)建的文件test1拷貝至自己主目錄下的hello子目錄; 輸入cp a test1 hello命令,拷貝該文件; 輸入cd hello命令,進(jìn)入hello目錄; 用ls -l命令查看是否存在test1,確認(rèn)拷貝成功。3、Linux編程基礎(chǔ)實(shí)驗(yàn) 用vi編輯器建立以下文件(有關(guān)vi編輯器的使用請(qǐng)參考文檔“Vi編輯器完全使用手冊(cè)”)在主目錄下輸入vi,進(jìn)入vi文本編輯器。首先進(jìn)入的是編輯模式

5、,輸入i,進(jìn)入插入模式才能編寫(xiě)代碼,將下面的程序1直接復(fù)制。然后點(diǎn)ESC鍵,再輸入 :wq hello.c,將文件保存為hello.c后,退出vi編輯器。程序1:hello.c#include <stdio.h>int main (void)printf ("Hello world, Linux programming! n");return 0;然后執(zhí)行命令編譯這段程序:# gcc hello.c -o hello查看可執(zhí)行文件hello是否生成。執(zhí)行:#. /hello查看程序執(zhí)行結(jié)果。結(jié)果為:Hello world, Linux programming!

6、分步編譯hello.c:執(zhí)行:# gcc -E hello.c -o hello.i觀察hello.i的內(nèi)容。執(zhí)行# gcc -c hello.i -o hello.o觀察hello.o是否生成生成hello.o文件# gcc hello.o -o hello觀察hello是否生成生成hello文件實(shí)驗(yàn)三 搭建嵌入式Linux開(kāi)發(fā)環(huán)境1、Linux操作系統(tǒng)下的網(wǎng)絡(luò)設(shè)置(1)啟動(dòng)Linux后,選擇系統(tǒng)管理網(wǎng)絡(luò),單擊左鍵,此時(shí),彈出如下界面。雙擊(2)選擇設(shè)備,雙擊上圖所示的“eth1”,彈出如下的對(duì)話框,進(jìn)行IP的設(shè)置。(3)選擇DNS,進(jìn)行DNS設(shè)置。(4)最后,激活網(wǎng)絡(luò)設(shè)備。雙擊激活網(wǎng)絡(luò)設(shè)備

7、(5)打開(kāi)Web瀏覽器,輸入5,進(jìn)入“嵌入式系統(tǒng)課程實(shí)驗(yàn)”文件夾,復(fù)制文件夾“嵌入式Linux系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)”里面的內(nèi)容到PC機(jī)的桌面上。2、Mincom 的設(shè)置(參考文檔“Linux系統(tǒng)下超級(jí)終端minicom的使用方法”)(1)啟動(dòng)Linux后,選擇應(yīng)用程序附件終端,單擊右鍵,選擇將該啟動(dòng)器添加到桌面,此時(shí),會(huì)在桌面上會(huì)出現(xiàn)一個(gè)終端的快捷鍵。(2)雙擊桌面上的終端,打開(kāi)一個(gè)終端。(可同時(shí)打開(kāi)多個(gè)終端)在命令提示符下,輸入:#minicom s回車,即可進(jìn)行minicom的參數(shù)設(shè)置:波特率115200,數(shù)據(jù)位8,奇偶校驗(yàn)無(wú),停止位1,無(wú)硬件流。(3)設(shè)置完成后保

8、存為默認(rèn)配置文件(4)退出設(shè)置界面,可以看到minicom啟動(dòng)的畫(huà)面。(5)連接好開(kāi)發(fā)板與PC機(jī)的串口線,啟動(dòng)開(kāi)發(fā)板,如看到如下畫(huà)面,說(shuō)明minicom已設(shè)置好。3、安裝交叉編譯器(在PC機(jī)Linux終端環(huán)境下進(jìn)行) 參考文檔“嵌入式Linux系統(tǒng)交叉編譯器的制作”所需軟件包:cross_2.95.3.tar.bz2步驟:(1) 在/usr/local下建一個(gè)名為arm的目錄。#mkdir /usr/local/arm(2)將cross-2.95.tar.bz2復(fù)制到arm目錄中。(3) 進(jìn)入arm目錄#cd /usr/local/arm(4)解壓軟件包c(diǎn)ross_2.95.3.tar.bz2

9、tar -xjvf cross-2.95.3.tar.bz2(5)解壓后arm目錄下出現(xiàn)一個(gè)2.95.3的目錄,將此目錄下的/bin目錄添加到環(huán)境變量中去。export PATH=/usr/local/arm/2.95.3/bin:$PATH(6) 用上述方法添加的環(huán)境變量在掉電后會(huì)丟失,因此,可以使用在“/etc/bashrc”的最后一行添加以上命令。# vi /etc/bashrc(7) 查看該路徑是否已添加到環(huán)境變量中。#echo $PATHusr/local/arm/2.95.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/s

10、bin: /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin4、安裝編譯ARM Linux內(nèi)核(在PC機(jī)Linux終端環(huán)境下進(jìn)行) 參考文檔“ARMLinux內(nèi)核”所需軟件包:kernel2410.tgz步驟;(1) 在/目錄下新建一個(gè)名為s3c2410的目錄。# mkdir s3c2410(2) 將kernel2410.tgz復(fù)制到s3c2410目錄中# cd / s3c2410/ /進(jìn)入s3c2410目錄# tar zxvf kernel2410.tgz /解壓kernel2410.tgz(3) 編譯內(nèi)

11、核。 # cd / s3c2410/ 2.4.18-rmk7 /進(jìn)入2.4.18-rmk7目錄# make menuconfig /執(zhí)行make menuconfig命令,進(jìn)行內(nèi)核配置。(4)進(jìn)入主界面后,裝載默認(rèn)配置文件kernel_2410.cfg。(也可根據(jù)自身需要定制內(nèi)核,具體請(qǐng)參考文檔“Linux內(nèi)核編譯配置選項(xiàng)”)(4)設(shè)置完成后,建立依賴關(guān)系,編譯內(nèi)核# makes dep # make zImage(5)編譯結(jié)束后,在arch/arm/boot目錄下生成了Linux內(nèi)核的壓縮映像zImage。5、下載內(nèi)核映像到開(kāi)發(fā)板:(1) 使用tftpcmd網(wǎng)絡(luò)傳輸,設(shè)置PC機(jī)IP地址,與實(shí)

12、驗(yàn)平臺(tái)的IP地址(BIOS的IP地址)設(shè)置在同一網(wǎng)段內(nèi)。這里,將PC的IP設(shè)為8,將實(shí)驗(yàn)平臺(tái)的IP地址設(shè)為00。并把tftpcmd復(fù)制到/bin文件夾下。(2)進(jìn)入boot目錄:#cd /s3c2410/ 2.4.18-rmk7/arch/arm/boot(3) 將開(kāi)發(fā)板與PC機(jī)用交叉網(wǎng)線連接好,設(shè)置好minicom,復(fù)位開(kāi)發(fā)板,按住A鍵,進(jìn)入BIOS命令行狀態(tài)提示符,輸入命令netload,回車。(4)打開(kāi)終端,在/s3c2410/2.4.18-rmk7/arch/arm/boot下新建一個(gè)down文件#vi dowm輸入如下內(nèi)容:tftpcmd

13、00 69 put zImage要下載的文件目標(biāo)板BIOS中的IP地址(5)雙擊down批處理文件,選擇在終端運(yùn)行,或是輸入如圖所示命令./down,將內(nèi)核映像下載到開(kāi)發(fā)板。(注意:down文件要和zImage文件在同一個(gè)目錄下)(6)傳輸完后,在minicom終端輸入命令“nfprog”,然后回車,然后輸入“1”,選擇第二個(gè)區(qū)塊,輸入“Y”確認(rèn)將文件燒寫(xiě)到nandflash中。實(shí)驗(yàn)四 編寫(xiě)應(yīng)用程序1、實(shí)驗(yàn)內(nèi)容:在目標(biāo)板上Linux環(huán)境下運(yùn)行“Hello World”程序2、實(shí)驗(yàn)步驟:(1)在 PC 機(jī)的Linux下用vi編輯器以下源代碼,并保存為helloworld.c

14、# cd /s3c2410 /到s3c2410目錄下# vi helloworld.c /編輯helloworld.c程序源程序如下:#include <stdio.h>int main(void)printf("hello, world!n");return 0;(2)編譯源程序,使用以下命令編譯,生成helloworld可執(zhí)行文件。arm-linux-gcc -o helloworld helloworld.c(3)將程序下載到目標(biāo)板并執(zhí)行 將可執(zhí)行文件下載到目標(biāo)平臺(tái)FS2410P目前主要有三種方式: 通過(guò)網(wǎng)絡(luò)下載:通過(guò)網(wǎng)絡(luò)下載程序的主要步驟是:先把hell

15、oworld復(fù)制到ftp共享目錄,然后在FS2410P上使用ftp下載。(請(qǐng)查閱相關(guān)資料自行完成) 通過(guò)NFS進(jìn)入映射(可參考文檔nfsonARMSYS.pdf)l 設(shè)置NFS共享目錄編輯PC機(jī)端NFS的相關(guān)文件# vi /etc/exports /修改/exports 文件,在文件中輸入以下內(nèi)容 /s3c2410 192.168.*.*(rw) / s3c2410為PC機(jī)共享給目標(biāo)平臺(tái)的目錄 / 192.168.*.*(rw) 為可訪問(wèn)共享目錄的網(wǎng)段 # exportfs rv / 通知系統(tǒng)共享目錄改變了,每次修改目錄后,/ 要運(yùn)行此命令來(lái)告訴系統(tǒng)此變化# /etc/rc.d/init.d/

16、nfs start / 啟動(dòng)NFS服務(wù)啟動(dòng) NFS 服務(wù): 確定關(guān)掉 NFS 配額: 確定啟動(dòng) NFS 守護(hù)進(jìn)程: 確定啟動(dòng) NFS mountd: 確定l 關(guān)閉防火墻,選擇系統(tǒng)管理安全級(jí)別防火墻,將其防火墻設(shè)為禁用。l 去掉 iptables 服務(wù),選擇系統(tǒng)管理services 在彈出的界面中,將iptables、ip6tables 前面的“”去掉。l 在minicom中,啟動(dòng)Linux后,在命令提示符下輸入:# mount 8:/s3c2410 /tmp /掛載共享目錄到目標(biāo)板目標(biāo)板的掛載目錄PC機(jī)端共享給目標(biāo)板的目錄PC機(jī)的IP地址 # cd /tmp /進(jìn)入到目標(biāo)

17、板的掛載目錄下#. /hellworld /執(zhí)行該目錄下的helloworld可執(zhí)行文件。注意:如果NFS mount不成功,主要從以下幾方面查找原因: 是否在修改PC機(jī)IP之后沒(méi)有重新激活網(wǎng)絡(luò) 檢查PC機(jī)和目標(biāo)板Linux系統(tǒng)中的IP是否在同一個(gè)網(wǎng)段段內(nèi)目標(biāo)板查看IP命令: ifconfig eth0目標(biāo)板更改IP命令: ifconfig eth0 *. *.*.*輸入要設(shè)置的IP地址,每次目標(biāo)板的板Linux系統(tǒng)重啟后都要重新設(shè)置。或修改根文件系統(tǒng)/usr/etc/rc.local文件中的IP,重新制作根文件系統(tǒng),燒寫(xiě)到目標(biāo)板,這樣就可以把改變的IP保存到FLASH,根文件系統(tǒng)的制作和燒寫(xiě)

18、辦法參考后面。 可在PC端 mount NFS目錄,看是否成功,如果成功,說(shuō)明NFS配置正確. /在PC機(jī)終端進(jìn)行# mount 8:/s3c2410 /tmp /掛載共享目錄到PC機(jī)端PC機(jī)端的掛載目錄PC機(jī)端共享給目標(biāo)板的目錄PC機(jī)的IP地址 如果按上述方法配置還mount不成功NFS共享目錄,可刪去PC端的DNS地址和網(wǎng)關(guān)地址,重新激活網(wǎng)絡(luò),并重新啟動(dòng)NFS服務(wù):# /etc/rc.d/init.d/nfs restart實(shí)驗(yàn)五 根文件系統(tǒng)的制作1、實(shí)驗(yàn)參考:FS2410P實(shí)驗(yàn)指導(dǎo)手冊(cè)v2.1.2.pdf 312313頁(yè)及文檔“制作Linux根文件系統(tǒng)”2、實(shí)驗(yàn)步驟

19、:/在PC機(jī)終端進(jìn)行(1)將 FS2410XP_camare_demo.cramfs 拷貝到/s3c2410 目錄下。(2)在該目錄下建立兩個(gè)文件:# cd /s3c2410/ /進(jìn)入s3c2410目錄# mkdir chang /新建目錄chang# mkdir guo /新建目錄guo(3)將FS2410XP_camare_demo.cramfs 掛接到chang目錄。# mount o loop FS2410XP_camare_demo.cramfs chang(4)將chang目錄下的內(nèi)容壓縮。# cd chang /進(jìn)入chang目錄# tar -cvf /s3c2410/1.tar

20、 ./ /壓縮當(dāng)前目錄為1.tar生成壓縮包所存放的目錄,包名為1.tar被壓縮的目錄,在這指當(dāng)前目錄這時(shí),將在chang目錄下產(chǎn)生一個(gè)名為1.tar的壓縮包。# cd . /返回上一層目錄# mv 1.tar guo /移動(dòng)到1.tar到guo目錄下# cd guo /進(jìn)入guo目錄# tar -xvf 1.tar /解壓1.tar# rm 1.tar /刪除1.tarrm:是否刪除 一般文件 “1.tar”? y(5)復(fù)制由實(shí)驗(yàn)四生成的helloworld可執(zhí)行文件到/s3c2410/guo/bin目錄下。(6)現(xiàn)在開(kāi)始制作cramfs根文件系統(tǒng)#. /mkcramfs /s3c2410/

21、guo FS2410XP_camare_demo.cramfs 制作根文件系統(tǒng)的工具,要把mkcramfs命令拷貝到當(dāng)前目錄制作根文件系統(tǒng)的源目錄目標(biāo)文件名在/s3c2410/guo目錄下,生成了新的根文件系統(tǒng)FS2410XP_camare_demo.cramfs,根文件系統(tǒng)的下載,燒寫(xiě)方法同內(nèi)核映像一樣。將新的根文件系統(tǒng)下載,燒寫(xiě)進(jìn)Nan flash的第三個(gè)區(qū)塊,復(fù)位目標(biāo)板,啟動(dòng)Linux,在命令提示符下輸入:/在minicom 終端進(jìn)行#. /helloworld /執(zhí)行helloworld 程序Hello, world! /執(zhí)行結(jié)果可看到如上結(jié)果。實(shí)驗(yàn)六 嵌入式Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

22、1. Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)流程進(jìn)行嵌入式Linux系統(tǒng)的開(kāi)發(fā),很大的工作量是為各種設(shè)備編寫(xiě)驅(qū)動(dòng)程序。在ARM平臺(tái)上開(kāi)發(fā)嵌入式Linux設(shè)備驅(qū)動(dòng)程序與在其他平臺(tái)上開(kāi)發(fā)是一樣的。總的來(lái)說(shuō),實(shí)現(xiàn)一個(gè)嵌入式Linux 設(shè)備驅(qū)動(dòng)的大致流程如下:(1) 查看原理圖,理解設(shè)備的工作原理(2) 定義主設(shè)備號(hào)(3) 在驅(qū)動(dòng)程序中實(shí)現(xiàn)驅(qū)動(dòng)的初始化。如果驅(qū)動(dòng)程序采用模塊的方式,則要實(shí)現(xiàn)模塊初始化。(4) 設(shè)計(jì)所要實(shí)現(xiàn)的文件操作,定義file_operations 結(jié)構(gòu)。(5) 實(shí)現(xiàn)中斷服務(wù)(中斷并不是每個(gè)設(shè)備驅(qū)動(dòng)所必須的)(6) 編譯該驅(qū)動(dòng)程序到內(nèi)核中,或者用insmod命令加載(7) 測(cè)試該設(shè)備 可參考文檔

23、“Linux設(shè)備驅(qū)動(dòng)程序介紹”。2. Linux下字符設(shè)備驅(qū)動(dòng)開(kāi)發(fā)實(shí)例LED驅(qū)動(dòng)(可參考FS2410P實(shí)驗(yàn)指導(dǎo)手冊(cè)v2.1.2.pdf,302-313)(1)實(shí)驗(yàn)內(nèi)容:4 個(gè)LED燈輪流閃爍本實(shí)驗(yàn)要求實(shí)現(xiàn)在一個(gè)字符設(shè)備驅(qū)動(dòng)里面實(shí)現(xiàn)對(duì)GPIO端口的操作。 在模塊加載的時(shí)候跑馬燈運(yùn)行起來(lái) 模塊卸載的時(shí)候,跑馬燈停止。FS2410P上的4個(gè)LED指示燈由4個(gè)I/O口控制,它們分別是:GPF4GPF7,輸出低電平時(shí)候,相應(yīng)的LED指示燈亮。(2)LED的原理圖FS2410P帶有4個(gè)用戶可編程I/O方式LED,圖1所示為L(zhǎng)ED硬件原理圖,下表為L(zhǎng)ED對(duì)應(yīng)的I/O 口。表1 指示燈占用的I/O口列表序號(hào)名

24、字CPU端口資源1LED1GPF42LED2GPF53LED3GPF64LED4GPF7圖1 LED原理圖(3) LED驅(qū)動(dòng)源代碼及說(shuō)明u 在/s3c2410下新建一個(gè)目錄:gpiodrvl #mkdir /s3c2410/gpiodrvl #cd /s3c2410/gpiodrvu 在/s3c2410/gpiodrv目錄下用vi編輯器編寫(xiě)符合上面功能的驅(qū)動(dòng)源程序gpiodrv.cl #vi gpiodrv.c#include <linux/config.h>#include <linux/module.h>#include <linux/fs.h>#inc

25、lude <linux/kernel.h>#include <linux/init.h>#include <linux/iobuf.h>#include <linux/major.h>#include <asm/uaccess.h>#include <asm/hardware.h>#include <asm/arch/cpu_s3c2410.h>#include <asm/io.h>#include <linux/vmalloc.h>#include <linux/delay.h&

26、gt;#define IOPORT_MAJOR 220int magic_leds_open(struct inode *inode, struct file *filp);int magic_leds_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned,long arg);int magic_leds_release(struct inode *inode, struct file *filp);static struct file_operations magic_leds_fops =ioctl

27、: magic_leds_ioctl,open: magic_leds_open,release: magic_leds_release,;#define LED1_ON() (GPFDAT &= 0x10)#define LED2_ON() (GPFDAT &= 0x20)#define LED3_ON() (GPFDAT &= 0x40)#define LED4_ON() (GPFDAT &= 0x80)#define LED1_OFF() (GPFDAT |= 0x10)#define LED2_OFF() (GPFDAT |= 0x20)#define

28、LED3_OFF() (GPFDAT |= 0x40)#define LED4_OFF() (GPFDAT |= 0x80)static int ledStatus;void LedSet(int led)ledStatus = led;if (ledStatus & 1)LED1_ON();elseLED1_OFF();if (ledStatus & 2)LED2_ON();elseLED2_OFF();if (ledStatus & 4)LED3_ON();elseLED3_OFF();if (ledStatus & 8)LED4_ON();elseLED4

29、_OFF();void LedDisy(void)LedSet(0x08);udelay(0x500000);LedSet(0x04);udelay(0x500000);LedSet(0x02);udelay(0x500000);LedSet(0x01);udelay(0x500000);LedSet(0x02);udelay(0x500000);LedSet(0x04);udelay(0x500000);LedSet(0x08);udelay(0x500000);static int _init magic_leds_init(void)int result = 0;printk("

30、;magic_leds_initn");result = register_chrdev(IOPORT_MAJOR, "gpio", &magic_leds_fops);if (result < 0)printk( "Failed to register major.n");return result;printk("success to registern");return 0;int magic_leds_open(struct inode *inode, struct file *filp)GPFCON

31、= 0x5500;GPFUP = 0xff;printk( "open gpio devicesn");return 0;void _exit magic_leds_exit(void)unregister_chrdev(IOPORT_MAJOR, "gpio");int _exit magic_leds_release(struct inode *inode, struct file *filp)printk("release this devicen");return 0;int magic_leds_ioctl(struct i

32、node *inode, struct file *filp, unsigned int cmd, unsignedlong arg)int err = 0;if (cmd = 1)while(arg-)LedDisy();printk(".");printk("n");return 0;return err;module_init(magic_leds_init);module_exit(magic_leds_exit);(4) 編譯安裝LED驅(qū)動(dòng)u 同樣,在/s3c2410/gpiodrv目錄下用vi編輯器編寫(xiě)該驅(qū)動(dòng)程序的Makefile文件:(Ma

33、kefile 的編寫(xiě)可參考Makefile中文教程.pdf)l #vi Makefile輸入以下內(nèi)容:CROSS = arm-linux-gccCFLAGS=-D_KERNEL_CFLAGS+=-DMODULECFLAGS+=-I/s3c2410/2.4.18-rmk7/includeCFLAGS+=-I/s3c2410/2.4.18-rmk7/include/linuxCFLAGS+=-I/usr/local/arm/2.95.3/includeCFLAGS+=-Wall -Wstrict-prototypes -Wno-trigraphs -Os -mapcsCFLAGS+=-fno-st

34、rict-aliasing -fno-common -fno-common -pipe -mapcs-32CFLAGS+=-march=armv4 -mtune=arm9tdmi -mshort-load-bytes -msoft-floatCFLAGS+=-DKBUILD_BASENAME=gpiodrvall: gpiodrv.ogpiodrv.o: gpiodrv.c$(CROSS) $(CFLAGS) -o gpiodrv.o -c gpiodrv.cclean:-rm -f $(EXEC) *.o * core將gpiodrv.c和Makefile放置在同一個(gè)目錄下gpiodrv下,

35、進(jìn)入這個(gè)目錄,輸入make后,編譯成功后將在這個(gè)目錄下生成一個(gè)gpiodrv.o文件。l #cd /s3c2410/gpiodrvl #make3. Linux字符設(shè)備的驅(qū)動(dòng)開(kāi)發(fā)實(shí)例測(cè)試LED(1)在/s3c2410/gpiodrv目錄下用vi編輯器編寫(xiě)led驅(qū)動(dòng)程序相應(yīng)的測(cè)試程序gpio_test.cl #vi gpio_test.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcnt1.h>#include <errno.h>#include

36、<linux/delay.h>#include <sys/ioctl.h>int main(int argc, char *argv)int i;int fd;fd = open("/dev/gpio", 0);if (fd < 0)perror("Failed to open device");exit(1);while(1)printf("please select number to run programn");printf("1:led on n2:quit");scanf(

37、"%d",&val);if(val = = 1)ioct1 (fd, 1, 10);else if(val = = 2)close(fd);return 0;編譯gpio_test.c,得到可執(zhí)行文件gpio_test。即用下面的命令:#arm-linux-gcc o gpio_test gpio_test.c4. Linux下字符設(shè)備的驅(qū)動(dòng)開(kāi)發(fā)實(shí)例實(shí)驗(yàn)步驟(也可參考FS2410P 實(shí)驗(yàn)指導(dǎo)手冊(cè)v2.1.2.pdf,311-313頁(yè)上的方法)(1) PC機(jī)進(jìn)入LINUX系統(tǒng),配置好minicom,連接好串口線,讓FS2410P教學(xué)實(shí)驗(yàn)平臺(tái)進(jìn)入LINUX環(huán)境,利用minicom來(lái)顯示。(2) 將編譯生成的gpiodrv.o和gpio_test用NFS mount到/tmp目錄下。(方法參考實(shí)驗(yàn)四通過(guò)NFS進(jìn)入映射)# mount 8:/s3c2410 /tmp# cd /tmp# cd /gpiodrv(3)加載設(shè)備驅(qū)動(dòng)gpiodrv.o模塊:insmod gpiodrv.o如果加載成功,可以通過(guò)cat /proc/devices 命令查看該設(shè)備的相關(guān)信息。卸載該設(shè)備驅(qū)動(dòng)模塊的命令是:rmmod gpiodrv(4)建立gpio設(shè)備節(jié)點(diǎn):

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論