嵌入式Linux系統(tǒng)開發(fā)實驗指導手冊概述_第1頁
嵌入式Linux系統(tǒng)開發(fā)實驗指導手冊概述_第2頁
嵌入式Linux系統(tǒng)開發(fā)實驗指導手冊概述_第3頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式Linux系統(tǒng)開發(fā)實驗指導手冊實驗一 BootLoader實驗一、實驗?zāi)康牧私釨ootLoader在嵌入式系統(tǒng)中的作用 掌握在BootLoader增加一個功能的流程二、實驗內(nèi)容向BootLoader增加一個簡單的功能模塊(如跑馬燈, A/D接口實驗等)三、實驗設(shè)備(略)四、實驗原理(參考FS2410P實驗指導手冊v2.1.2.pdf285-292頁及文檔“ BootLoader編寫指南”五、實驗步驟(參考FS2410P實驗指導手冊v2.1.2.pdf 287-288 頁)實驗二Linux的安裝與基本操作實驗一、實驗?zāi)康脑赑C機上安裝Linux操作系統(tǒng)熟悉常用Linux命令和操作 了解Li

2、nux環(huán)境下基于GCC的C程序開發(fā)流程二、實驗內(nèi)容1、安裝Linux操作系統(tǒng)不在實驗室進行該項實驗內(nèi)容,自行在個人電腦上安裝,請參考文檔“Linux系統(tǒng)簡介與安裝” o2、 常用Linux命令和操作(更多Linux命令和操作方法,請參考文檔“ Linux命令大集合”)登錄Linux系統(tǒng)用戶:root口令:123456輸入上面的用戶名和口令,從而登錄Linux操作系統(tǒng)。目錄操作 查看主目錄輸入pwd命令,會顯示你所在的主目錄。如:/home/arm 以長格式查看主目錄下有哪些目錄和文件輸入Is -l命令,會顯示主目錄下所有的文件,包括文件的屬性,大小,創(chuàng)建時間等。 文件操作 新建一個空文件,查看

3、其屬性信息; 輸入touch test命令,創(chuàng)建名為test的空文件;輸入touch test1命令,創(chuàng)建名為test1的空文件;再輸入ls -l命令,查看剛剛所建文件的屬性,屬性值為-rw-rw-r- 用chmod 777更改該文件屬性,更改后再查看屬性信息;輸入chmod 777 test命令,更改該文件屬性;再輸入Is -I命令,查看更改文件屬性后的文件屬性,屬性值為-rwxrwxrwx。 刪除該文件。輸入rm test命令,刪除test文件;再輸入用Is -I命令查看,確認刪除成功??截惒僮?在主目錄下新建一子目錄 hello;輸入mkdir hello命令,創(chuàng)建hello目錄;用ls

4、 -l命令查看,確認創(chuàng)建成功。 將之前創(chuàng)建的文件testl拷貝至自己主目錄下的hello子目錄;輸入cp -a testl hello命令,拷貝該文件; 輸入cd hello命令,進入hello目錄; 用ls -l命令查看是否存在testl,確認拷貝成功。3、Linux編程基礎(chǔ)實驗用vi編輯器建立以下文件(有關(guān)vi編輯器的使用請參考文檔“Vi編輯器完全使用手冊”) 在主目錄下輸入vi,進入vi文本編輯器。首先進入的是編輯模式,輸入i,進入插入模式才能編寫代碼,將下面的程序1直接復制。然后點ESC鍵,再輸入:wq hello.c,將文件保存為hello.c 后,退出vi編輯器。程序 1: hel

5、lo.c#i nclude <stdio.h>int mai n (void)printf ("Hello world, Linux programmi ng! n");return 0;然后執(zhí)行命令編譯這段程序:# gcc hello.c -o hello查看可執(zhí)行文件hello是否生成。執(zhí)行:#. /hello查看程序執(zhí)行結(jié)果。結(jié)果為: Hello world, Linux programming!分步編譯hello.c:執(zhí)行:# gcc -E hello.c -o hello .1觀察hello.i的內(nèi)容。執(zhí)行# gcc -c hello.i -o hel

6、lo.o觀察hello.o是否生成 生成hello.o文件# gcc hello.o -o hello觀察hello是否生成生成hello文件實驗三搭建嵌入式Linux開發(fā)環(huán)境1、Linux操作系統(tǒng)下的網(wǎng)絡(luò)設(shè)置(1) 啟動Linux后,選擇系統(tǒng)t管理t網(wǎng)絡(luò),單擊左鍵,此時,彈出如下界面網(wǎng)絡(luò)配置文件®配置文件®幫助硬件IPsecDNS主機激活配置文件:公用您可在此址配置與物理硬件相連的網(wǎng)絡(luò)設(shè)番。單亍硬件上 可有多T虛擬詒番與之相赴。(2) 選擇設(shè)備,雙擊上圖所示的“ ethl ”,彈出如下的對話框,進行IP的設(shè)置選擇DNS進行DNS設(shè)置(4)最后,激活網(wǎng)絡(luò)設(shè)備文件®

7、 配置文件® 幫助®網(wǎng)貉配置雙擊激活網(wǎng)絡(luò)設(shè)備新建激活硬件的IPsecDNS主機星制口激活配置文件:公用您可在此處配置與物理硬件相連的網(wǎng)谿設(shè)備。單t硬件上 可有參T虛擬設(shè)苗與之相連*(5) 打開 We!瀏覽器,輸入 5,進入“嵌入式系統(tǒng) 課程實驗”文件夾,復制文件夾“嵌入式Linux系統(tǒng)開發(fā)實驗”里面的內(nèi)容到PC機的桌面上2、Mincom的設(shè)置(參考文檔“ Linux系統(tǒng)下超級終端minicom的使用方法”)(1) 啟動Linux后,選擇應(yīng)用程序t附件t終端,單擊右鍵,選擇將該啟動器添加到桌面,此時, 會在桌面上會出現(xiàn)一個終端的快捷鍵。(2)

8、雙擊桌面上的終端,打開一個終端。(可同時打開多個終端)在命令提示符下,輸入:#minicom - s回車,即可進行minicom的參數(shù)設(shè)置:波特率115200,數(shù)據(jù)位8,奇偶校驗無,停止位1, 無硬件流。root(§)localhost:- 文件®編寵査看念)繆端標簽幫助®Fl 1 cnames and pathsFile transfer protocol&氐rt日1 part. EGt-upModem and di ali ngScreen and keyboard Save s«tup am dfl Save setup 酋弓* Ext t

9、Exit from Minicomtw BIHW樣初 莉?qū)澭?VVKH><pii to upA - Sitr ta I Ctv i»t /dev/1 lySOUi Lork 11 it1 :Lar£i t ionz /vj r / loclkD E -f G -Q|in ProgrumGilluul P*frilrnt 1SNi I'b rilvar t* F Io* Gin Biol :陽 SqI tiwnrc F low onl rol ; NriQunge uhifh sr 11 ing?Screen and keyboi r<l Sac -

10、elup 1 s df S邑時E 聲 lup 4 s o v £x 11(3) 設(shè)置完成后保存為默認配置文件。應(yīng)用程序 位蚤 系統(tǒng) 芒感巳& 叵文件 編輯© 查看陋 終端 標簽 稱助妊I conf iguraLion I Filcnamcs and paths| Filc transfer protocol&| Serial port setup| Madem and dialing| Screen 日nd koyboEfdS日化空lup/E dflI Save setup ee| ExitExit froni Minicom(4) 退出設(shè)置界面,可以看到

11、minicom啟動的畫面rootlocahost:-文件®編瑁查看歯終端標簽®幫助®Iconfi £urotion Filenames and pat hsFi le transfer protocolsSerial pert setupModem and dialingI Screen and keyboardSave setup as dflSEtup 呂s* Exi LExit from Minicom文 n 迥呼蟻E)hmwW 1 cort in iTini com 2 J)i.(JCTTIOSr lit* loirv Bufftr Flcey

12、Mi rm*. Sen-r rh Iti i ior Ou ffer. 11 Bn OHipi led cm Jan 21 2003 tOslSUI,Pre(TR!-A Z (ist hr Ip an fprcis I key*(5) 連接好開發(fā)板與PC機的串口線,啟動開發(fā)板,如看到如下畫面,說明mini com已設(shè)置好SST39VFI601 FoundI :2,.八陽-.笛3 ; TFT LCD莆4 : LCD 筑.ifbfM.苗5 : VGA 640 .480.笛吊:啟& .Linux7 :啟晞.帕nee8 : GSM/GPRS.ffi9 : GPS. §'10

13、J ADC-MII :直”龜給© .$ .笛12 :步議電BL笛13 : 8X8 LE會.$ .苗 1斗:會,IKI.、飢笛15 : I ISofe > .S16 : r is. & . 6 .M17 I 1C.B18 : CF & . S19 :【DE.才術(shù)20 : g .會屆3、安裝交叉編譯器(在PCM Linux終端環(huán)境下進行)參考文檔“嵌入式Linux系統(tǒng)交叉編譯器的制作”所需軟件包:cross_2.953tar.bz2步驟: 在/usr/local 下建一個名為arm的目錄。#mkdir /usr/local/arm(2) 將cross-2.95.ta

14、r.bz2 復制到 arm目錄中。(3) 進入 arm 目錄 #cd /usr/local/arm(4) 解壓軟件包 cross_2.953tar.bz2tar -xjvf cross-2.953tar.bz2(5) 解壓后arm目錄下出現(xiàn)一個2.95.3的目錄,將此目錄下的/bin目錄添加到環(huán)境變量中去export PATH=/usr/local/arm/2.95.3/bi n:$PATH(6) 用上述方法添加的環(huán)境變量在掉電后會丟失,因此,可以使用在“/etc/bashrc ”的最后一行添加以上命令。# vi /etc/bashrc應(yīng)用程序恆置系統(tǒng) 0既樓思&團圍rootlocal

15、host:/usr/locaf/arm交件®湍輅查看終端棉籤祥助®3 Turn on checkvri nsizehopt s ch-eckdn鼻丨百*SPSr = "S-v8 " && PSl="|Wh US 'fiif ! shopt f loeln_shell : then fF We're not a login shell= Need to redefine pathmunge it get's undefined at the end of /etc/profile pathnunge ()

16、if ! echo SPATH I Zbin/ef rep f '(: )SHS| : V l thenif "S2* - "aftier" | z thenFATE書FATE詣】elsePATH=J&:h SPATHfififef 1 i ii /ictd/prari 1 c - d/* - sh : doif =r 寫廣:thenSifidoneunset iunuet pathnuncefis viids l-=4 i:s=4export PATH-/uar/l oc al /arm/2 95 3/bi n: SPATHIINSERT (7)

17、 查看該路徑是否已添加到環(huán)境變量中。#echo $PATHusr/local/arm/2.95.3/bi n:/usr/kerberos/sb in:/usr/kerberos/bi n:/usr/local/sb in: /usr/local/bi n:/sbi n:/bin:/usr/sb in:/usr/bi n:/usr/X11R6/bi n:/root/b in4、安裝編譯ARM Linux內(nèi)核(在PC機Linux終端環(huán)境下進行) 參考文檔“ ARMLinu內(nèi)核” 所需軟件包:kernel2410.tgz步驟;(1) 在/目錄下新建一個名為S3C2410的目錄。# mkdir s3c

18、2410(2) 將kernel2410.tgz復制到 s3c2410目錄中# cd / s3c2410/ 進入 s3c2410目錄# tar zxvf kernel2410.tgz/解壓 kernel2410.tgz(3) 編譯內(nèi)核。# cd /s3c2410/ 2.4.18-rmk7# make menuconfig/進入2.4.18-rmk7 目錄執(zhí)行make menuconfig命令,進行內(nèi)核配置。kernel_2410.cfg。(也可根據(jù)自身需要定制內(nèi)核,具體(4) 進入主界面后,裝載默認配置文件 請參考文檔“ Linux內(nèi)核編譯配置選項”)(4) 設(shè)置完成后,建立依賴關(guān)系,編譯內(nèi)核#

19、 makes dep# make zlmage(5) 編譯結(jié)束后,在arch/arm/boot目錄下生成了 Linux內(nèi)核的壓縮映像zlmageo5、下載內(nèi)核映像到開發(fā)板:(1) 使用tftpcmd網(wǎng)絡(luò)傳輸,設(shè)置PC機IP地址,與實驗平臺的IP地址(BIOS勺IP地址)設(shè)置在 同一網(wǎng)段內(nèi)。這里,將PC勺IP設(shè)為8,將實驗平臺的IP地址設(shè)為00。并 把tftpcmd復制到/bin文件夾下。(2) 進入boot 目錄:#cd/s3c2410/ 2.4.18-rmk7/arch/arm/boot(3) 將開發(fā)板與PO用交叉網(wǎng)線連接好,設(shè)置好 minicom

20、,復位開發(fā)板,按住A鍵,進入BIOS命 令行狀態(tài)提示符,輸入命令netload,回車。立件(E)編輯 查看 終端茁 稀簽 W0H)BI(JS for KS2410X Platforir Has rd VI .-Jti+ * +*+* + *+*+*+ + * + *+*+*+-*+ *+*Xor Rash ll> 辻 t M4E00E4PS5T39VF16O1 FoundXand Flash IT) i s OxFC76 b Size 二St呂tuft = flxCOBuild date : Jun 01 200515:41 :24Much!ne Number is 13IP addre

21、ss J 202.193,5.21Serial baud : 1 lSOProgram s-avc in nor fl ashProEftm s-avfi address 010000Progran run addres-5 O.30008000 j?rograiE boot params root=/Je /mtdbl口c爛 toadramdi sk=0 i mt t=/l i nuxrc consol e=tCPt deck U 2W .OW.OOOflzMLR clock is 100,000hOOOHzPCLt clack 口 和 *000.000旳Current dale is 20

22、F1T2TF SA'fCurrent time i s 2F: 2:aSSet hoot key is key 1 * check state hi gh to boot>nctloadXow Jonload Cile from net Lo 0v30005000-.Mint TFTP Server L.C (IP ; 1 PORT J 船)Type tf t_p -: 22 *193.5-21 put ft lename at the has t PC(4) 打開終端,在 /s3c2410/2.4.18-rmk7/arch/arm/boot下新建一個 do

23、wn文件#vi dowm輸入如下內(nèi)容:tftpcmd 00 69 put zImage要下載的文件(5)雙擊down批處理文件,選擇在終端運行,或是輸入如圖所示命令./down,將內(nèi)核映像下載到開發(fā)板。(注意:down文件要和zlmage文件在同一個目錄下)rootlocalhost:/5弓(:2410乙4.丄啟-河比7十刊匸11/已111/匕0 0上文件® 編譴回 查看也J終端 標簽 幫肋®rooi.frlo<alhost "f cJ A3<24I0/2.4. l-rmk7/-arcti/aria/twot/rooLwlotal

24、host btiot1sbontp compressed 駛 Fin do mu' i ns is'tMaKef i】t z n- 7root*l ocalhost boot;# i /dcvnpuLti ng z Imtigc to 202.193.21:zlstaec ocLct Sent 8 I 7ti48 bytes in I .2 seconds (545C987 bi I s/sec 'I rnotfrl ocal host twot 苻 |(6)傳輸完后,在minicom終端輸入命令“ nfprog”,然后回車,然后輸入“ 1”,選擇第二個區(qū) 塊,輸入“

25、Y”確認將文件燒寫到nandflash中。£應(yīng)用程序位豎系統(tǒng) 叵10懇巴&rootlocalhost:'*-文件電漏寵® 查看電)終端標簽幫助砂文件電漏寵® 查看電)終端標簽幫助砂CPU clock is 200,000,000HzCPU clock is 200.000.000HzHCLK clock is 100,000,000HzPCLK clock is 50.000.000血Current dle i s 20FI-12-1F 1 SATCurrent time i s 2F: 2:53Set boot key is kcyl »

26、; check stahigh to bool >netloadXqw download file from net to 0x30008000.* Mini TFTP Server 1.0 (IP : 202,193.9.21 PORT: Type tftp -i 202.193,9>21 put rilename al Ihe Press ESC key to exi LStarting the TFTP download +.HCLK clock is 100,000.000HzPCLK clock is 50.000.000HzCurrent dale i s 20F1-1

27、2-1FCurrent time i s 2F: 2:53I SATSet boot key is keyl » check stahigh to bool>netlaadNov doiload file from nc-1 to Ox-30008000. . *Mini TFTP Server 1.0IP : 202.193,9.21 PORT:Type tftp -i 202.193.9,21 put filename at thePress ESC key to ei LStarl t ng the TFl'F download .Received C79F0 b

28、yles success>nfprogPlease se1ecI Sand flash region to wri te» E&cto abortYrestartstartstartstart0x00000000,0x00100000.0x00200000.0x02000000.you sure to wri tcy/n:start address 0x800sizesizesizesinand0x001000000x001000000x011 >300000x02000000flash frotLPar tOPartiPart?Part30x100000 wt

29、th ram addrcss 0x30006000. si z?實驗四編寫應(yīng)用程序1實驗內(nèi)容:在目標板上 Linux環(huán)境下運行“ Hello World ”程序2、實驗步驟:(1) 在PC機的Linux下用vi編輯器以下源代碼,并保存為helloworld.c# cd /s3c2410II 到 s3c2410目錄下# vi helloworld.c編輯 helloworld.c程序源程序如下:#i nclude <stdio.h> int main (void)prin tf("hello, world!n");return 0;(2)編譯源程序,使用以下命令編

30、譯,生成helloworld可執(zhí)行文件# arm-linux-gcc - o helloworld helloworld.c(3) 將程序下載到目標板并執(zhí)行將可執(zhí)行文件下載到目標平臺FS2410P目前主要有三種方式: 通過網(wǎng)絡(luò)下載:通過網(wǎng)絡(luò)下載程序的主要步驟是:先把 helloworld復制到ftp共享目 錄,然后在FS2410上使用ftp下載。(請查閱相關(guān)資料自行完成) 通過NFSS入映射(可參考文檔nfsonARMSYS.pd)設(shè)置NF洪享目錄一一編輯PC機端NFS勺相關(guān)文件# vi /etc/exports/s3c2410 192.168.*(rw)# exportfs# /etc/rc

31、.d/i nit.d/nfs start/修改/exports 文件,在文件中輸入以下內(nèi)容/ s3c2410為P(機共享給目標平臺的目錄/ 192.168.*.*(rw)為可訪問共享目錄的網(wǎng)段/通知系統(tǒng)共享目錄改變了,每次修改目錄后,/要運行此命令來告訴系統(tǒng)此變化/啟動NF馭務(wù)啟動NFS服務(wù):確定關(guān)掉NFS配額:確定啟動NFS守護進程:確定啟動NFS mountd:確定將其防火墻設(shè)為禁用關(guān)閉防火墻,選擇系統(tǒng)一一管理一一安全級別防火墻,2 ft請為您的系統(tǒng)選擇安全級別。陰火墻選項®SELinux S)B方火7禁用信怪的服務(wù): FTP NF540 SSH : .j ITi L .j0 l

32、elnet /(HTTP,-其它端口 X取消©Q確定去掉iptables服務(wù),選擇系統(tǒng)管理 services 在彈出的界面中,將iptables、ip6tables 前面的 “V” 去掉。在minicom中,啟動Linux后,在命令提示符下輸入:# mount 8:/s3c2410 /tmp/ 掛載共享目錄到目標板PC機的IP地址PC機端共享給目標板的目錄 目標板的掛載目錄# cd /tmp#. /hellworld/進入到目標板的掛載目錄下/執(zhí)行該目錄下的helloworld 可執(zhí)行文件。注意:如果NFS moun不成功,主要從以下幾方面查找原因:是否在修改P

33、(機IP之后沒有重新激活網(wǎng)絡(luò)檢查P(機和目標板Linux系統(tǒng)中的IP是否在同一個網(wǎng)段段內(nèi)目標板查看IP命令:ifconfig eth0目標板更改 IP 命令:ifconfig eth0 * * * *輸入要設(shè)置的IP地址,每次目標板的板Linux系統(tǒng)重啟后都要重新設(shè)置。或修改根文件系統(tǒng)/usr/etc/rc.local 文件中的IP,重新制作根文件系統(tǒng),燒寫到目標板,這樣就可以把改變的IP保存到FLASH,根文件系統(tǒng)的制作和燒寫辦法參考后面。可在PC端 mount NFS 目錄,看是否成功,如果成功,說明NFSE置正確./在PC機終端進行如果按上述方法配置還mount不成功NF洪享目錄,可刪去

34、PC端的DNS地址和網(wǎng)關(guān)地址,重新激活網(wǎng)絡(luò),并重新啟動 NFS艮務(wù):# /etc/rc.d/init.d/nfs restart實驗五根文件系統(tǒng)的制作1實驗參考:FS2410P實驗指導手冊v242.pdf 312 313頁及文檔“制作Linux根文件系統(tǒng)”2、實驗步驟:/在PC機終端進行(1) 將 FS2410XP_camare_demo.cramfs 拷貝到 /s3c2410 目錄下。(2) 在該目錄下建立兩個文件:# cd /s3c2410/ 進入 s3c2410 目錄# mkdir chang/ 新建目錄 chang# mkdir guo/ 新建目錄 guo(3) 將FS2410XP_c

35、amare_demo.cramfs掛接到 chang目錄。(4)# mount - o loop FS2410XP_camare_demo.cramfs chang 將chang目錄下的內(nèi)容壓縮。# cd cha ng這時,將在chang目錄下產(chǎn)生一個名為1.tar的壓縮包# cd ./返回上一層目錄# mv 1.tar guo# cd guo# tar -xvf 1.tar# rm 1.tarrm:是否刪除/移動到1.tar到guo目錄下/進入guo目錄/ 解壓 1.tar/ 刪除 1.tar一般文件 “ 1.tar ” ? y(5) 復制由實驗四生成的helloworld可執(zhí)行文件到/s3

36、c2410/guo/bin目錄下(6) 現(xiàn)在開始制作cramfs根文件系統(tǒng)#. /mkcramfs /s3c2410/guo FS2410XP camare demo.cramfs制作根文件系統(tǒng)的工具,要把 m kcramfs命令拷貝到當前目錄目標文件名制作根文件系統(tǒng)的源目錄在/s3c2410/guo目錄下,生成了新的根文件系統(tǒng) FS2410XP_camare_demo.cramfs根文件系 統(tǒng)的下載,燒寫方法同內(nèi)核映像一樣。將新的根文件系統(tǒng)下載,燒寫進Nanflash的第三個區(qū)塊, 復位目標板,啟動Linux,在命令提示符下輸入:/在minicom終端進行#. /helloworld/ 執(zhí)行

37、 helloworld 程序Hello, world!/ 執(zhí)行結(jié)果可看到如上結(jié)果。實驗六嵌入式Linux設(shè)備驅(qū)動程序開發(fā)1. Linux設(shè)備驅(qū)動程序開發(fā)流程進行嵌入式Linux系統(tǒng)的開發(fā),很大的工作量是為各種設(shè)備編寫驅(qū)動程序。在 AR平臺上開 發(fā)嵌入式Linux設(shè)備驅(qū)動程序與在其他平臺上開發(fā)是一樣的??偟膩碚f,實現(xiàn)一個嵌入式 Linux 設(shè)備驅(qū)動的大致流程如下:(1) 查看原理圖,理解設(shè)備的工作原理(2) 定義主設(shè)備號(3) 在驅(qū)動程序中實現(xiàn)驅(qū)動的初始化。如果驅(qū)動程序采用模塊的方式,則要實現(xiàn)模塊初始化。 設(shè)計所要實現(xiàn)的文件操作,定義file_operations結(jié)構(gòu)。(5)實現(xiàn)中斷服務(wù)(中斷并

38、不是每個設(shè)備驅(qū)動所必須的) 編譯該驅(qū)動程序到內(nèi)核中,或者用insmod命令加載(7) 測試該設(shè)備可參考文檔“ Linux設(shè)備驅(qū)動程序介紹”。2. Linux下字符設(shè)備驅(qū)動開發(fā)實例一一LEE3區(qū)動(可參考FS2410實驗指導手冊v2.12pdf ,302-313)(1)實驗內(nèi)容:4個LED丁輪流閃爍本實驗要求實現(xiàn)在一個字符設(shè)備驅(qū)動里面實現(xiàn)對 GPIO端 口的操作。在模塊加載的時候跑馬燈運行起來模塊卸載的時候,跑馬燈停止。FS2410吐的4個LED旨示燈由4個I/O 口控制,它們分別是:GPF GPF7輸出低電平時候,相應(yīng)的LED旨示燈亮(2) LED勺原理圖圖1 LED原理圖FS2410帶有4個

39、用戶可編程I/O方式LED圖1所示為LE硬件原理圖,下表為LED寸應(yīng)的I/O 口 表1指示燈占用的I/O 口列表序號名字CPU端 口資源1LED1GPF42LED2GPF53LED3GPF64LED4GPF71 GPi1 GPF1 GPFC1 GPF7(3) LED驅(qū)動源代碼及說明在/s3c2410下新建一個目錄:gpiodrv#mkdir /s3c2410/gpiodrv#cd /s3c2410/gpiodrv在/s3c2410/gpiodrv目錄下用vi編輯器編寫符合上面功能的驅(qū)動源程序 gpiodrv.c#vi gpiodrv.c#in clude <li nux/con fig.

40、h>#in clude <li nu x/module.h>#i nclude <li nu x/fs.h>#i nclude <li nu x/ker nel.h>#i nclude <li nux/in it.h>#in clude <li nu x/iobuf.h>#in clude <li nu x/major.h>#in clude <asm/uaccess.h>#in clude <asm/hardware.h>#in clude <asm/arch/cpu_s3c2410.

41、h>#in clude <asm/io.h>#in clude <li nu x/vmalloc.h>#in clude <li nu x/delay.h>#defi ne IOPORT_MAJOR 220int magic_leds_ope n$truct inode *ino de, struct file *filp);int magic_leds_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned,longarg);int magic_leds_rel

42、easestruct inode *ino de, struct file *filp);static structfile_operati ons magic_leds_fops = 一 一一 ioctl: magic_leds_ioctl,ope n: magic_leds_ope n, release: magic_leds_release, ;#defi ne LED1_ON() (GPFDAT &= 0x10) #defi ne LED2_ON() (GPFDAT &= 0x20) #defi ne LED3_ON() (GPFDAT &= 0x40) #de

43、fi ne LED4_ON() (GPFDAT &= 0x80) #defi ne LED1_OFF() (GPFDAT |= 0x10) #defi ne LED2_OFF() (GPFDAT |= 0x20) #defi ne LED3_OFF() (GPFDAT |= 0x40) #defi ne LED4_OFF() (GPFDAT |= 0x80) static int ledStatus;void LedSet(i nt led)ledStatus = led;if (ledStatus & 1)LED1_ON();elseLED1_OFF();if (ledSta

44、tus & 2)LED2_ON();elseLED2_OFF();if (ledStatus & 4)LED3_ON();elseLED3_OFF();if (ledStatus & 8)LED4_ON();elseLED4_OFF();void LedDisy(void)LedSet(0x08);udelay(0x500000);LedSet(0x04);udelay(0x500000);LedSet(0x02);udelay(0x500000);LedSet(0x01);udelay(0x500000);LedSet(0x02);udelay(0x500000);L

45、edSet(0x04);udelay(0x500000);LedSet(0x08);udelay(0x500000);static int _init magic_leds_i nit(void) 一一int result = 0;prin tk("magic_leds_i nitn");result = register_chrdev(IOPORT_MAJOR, "gpio", & magic_leds_fops);if (result < 0)prin tk( "Failed to register major.'n&

46、quot;);retur n result;prin tk("success to register n"return 0;int magic_leds_ope n$truct inode *ino de, struct file *filp) 一 一GPFCON = 0x5500;GPFUP = 0xff;prin tk( "ope n gpio devicesn);return 0;void _exit magic_leds_exit(void)un register_chrdev(IOPORT_MAJOR, "gpio"); 一 一int

47、 _exit magic_leds_releasetruct inode *ino de, struct file *filp) 一一prin tk("release this devicen);return 0;int magic_leds_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)int err = 0;if (cmd = 1)while(arg-)LedDisy();printk(".");prin tk("n");r

48、eturn 0;return err;modulenit(magic_leds_i nit);module_exit(magic_leds_exit);編譯安裝LE驅(qū)動同樣,在/s3c2410/gpiodrv目錄下用vi編輯器編寫該驅(qū)動程序的 Makefile文件:(Makefile 的編寫可參考Makefile中文教程.pdf)#vi Makefile輸入以下內(nèi)容:CROSS = arm-li nux-gccCFLAGS=-D_KERNEL_CFLAGS+=-DMODULECFLAGS+=-l/s3c2410/2.4.18-rmk7/i ncludeCFLAGS+=-l/s3c2410/2.

49、4.18-rmk7/i nclude/li nuxCFLAGS+=-l/usr/local/arm/2.95.3/i ncludeCFLAGS+=-Wall -Wstrict-prototypes -Wno-trigraphs -Os -mapcsCFLAGS+=-fno-strict-aliasi ng -fno-com mon -fno-com mon -pipe -mapcs-32CFLAGS+=-march=armv4 -mt un e=arm9tdmi -mshort-load-bytes -msoftfloat CFLAGS+=-DKBUILD_BASENAME=gpiodrval

50、l: gpiodrv.ogpiodrv.o: gpiodrv.c$(CROSS) $(CFLAGS) -o gpiodrv.o -c gpiodrv.cclea n:-rm -f $(EXEC) *.o * core將gpiodrv.c和Makefile放置在同一個目錄下gpiodrv下,進入這個目錄,輸入 make后編 譯成功后將在這個目錄下生成一個gpiodrv.o文件。#cd /s3c2410/gpiodrv#make3. Linux字符設(shè)備的驅(qū)動開發(fā)實例一測試LED(1)在/s3c2410/gpiodrv目錄下用vi編輯器編寫led驅(qū)動程序相應(yīng)的測試程序gpio_test.c#vi g

51、pio_test.c#in clude <stdio.h>#i nclude <stdlib.h>#in clude <uni std.h>#in elude vfen t1.h>#in elude verrno .h>#in elude <li nu x/delay.h>#in elude <sys/ioctl.h>int main (i nt arge, char *argv)int i;int fd;fd = ope n("/dev/gpio", 0);if (fd < 0)perror("Failed to ope n deviee');exit(1);while(1)prin tf( "please seleet nu mber to run program、®"prin tf( "1:led on n2:quit");sea nf("%d",&val);if (val = = 1)io

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論