嵌入式Linux系统开发实验指导手册概述_第1页
嵌入式Linux系统开发实验指导手册概述_第2页
嵌入式Linux系统开发实验指导手册概述_第3页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式Linux系统开发实验指导手册实验一 BootLoader实验一、实验目的了解BootLoader在嵌入式系统中的作用 掌握在BootLoader增加一个功能的流程二、实验内容向BootLoader增加一个简单的功能模块(如跑马灯, A/D接口实验等)三、实验设备(略)四、实验原理(参考FS2410P实验指导手册v2.1.2.pdf285-292页及文档“ BootLoader编写指南”五、实验步骤(参考FS2410P实验指导手册v2.1.2.pdf 287-288 页)实验二Linux的安装与基本操作实验一、实验目的在PC机上安装Linux操作系统熟悉常用Linux命令和操作 了解Li

2、nux环境下基于GCC的C程序开发流程二、实验内容1、安装Linux操作系统不在实验室进行该项实验内容,自行在个人电脑上安装,请参考文档“Linux系统简介与安装” o2、 常用Linux命令和操作(更多Linux命令和操作方法,请参考文档“ Linux命令大集合”)登录Linux系统用户:root口令:123456输入上面的用户名和口令,从而登录Linux操作系统。目录操作 查看主目录输入pwd命令,会显示你所在的主目录。如:/home/arm 以长格式查看主目录下有哪些目录和文件输入Is -l命令,会显示主目录下所有的文件,包括文件的属性,大小,创建时间等。 文件操作 新建一个空文件,查看

3、其属性信息; 输入touch test命令,创建名为test的空文件;输入touch test1命令,创建名为test1的空文件;再输入ls -l命令,查看刚刚所建文件的属性,属性值为-rw-rw-r- 用chmod 777更改该文件属性,更改后再查看属性信息;输入chmod 777 test命令,更改该文件属性;再输入Is -I命令,查看更改文件属性后的文件属性,属性值为-rwxrwxrwx。 删除该文件。输入rm test命令,删除test文件;再输入用Is -I命令查看,确认删除成功。拷贝操作 在主目录下新建一子目录 hello;输入mkdir hello命令,创建hello目录;用ls

4、 -l命令查看,确认创建成功。 将之前创建的文件testl拷贝至自己主目录下的hello子目录;输入cp -a testl hello命令,拷贝该文件; 输入cd hello命令,进入hello目录; 用ls -l命令查看是否存在testl,确认拷贝成功。3、Linux编程基础实验用vi编辑器建立以下文件(有关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;然后执行命令编译这段程序:# gcc hello.c -o hello查看可执行文件hello是否生成。执行:#. /hello查看程序执行结果。结果为: Hello world, Linux programming!分步编译hello.c:执行:# gcc -E hello.c -o hello .1观察hello.i的内容。执行# gcc -c hello.i -o hel

6、lo.o观察hello.o是否生成 生成hello.o文件# gcc hello.o -o hello观察hello是否生成生成hello文件实验三搭建嵌入式Linux开发环境1、Linux操作系统下的网络设置(1) 启动Linux后,选择系统t管理t网络,单击左键,此时,弹出如下界面网络配置文件®配置文件®帮助硬件IPsecDNS主机激活配置文件:公用您可在此址配置与物理硬件相连的网络设番。单亍硬件上 可有多T虚拟诒番与之相赴。(2) 选择设备,双击上图所示的“ ethl ”,弹出如下的对话框,进行IP的设置选择DNS进行DNS设置(4)最后,激活网络设备文件®

7、 配置文件® 帮助®网貉配置双击激活网络设备新建激活硬件的IPsecDNS主机星制口激活配置文件:公用您可在此处配置与物理硬件相连的网谿设备。单t硬件上 可有參T虚拟设苗与之相连*(5) 打开 We!浏览器,输入 5,进入“嵌入式系统 课程实验”文件夹,复制文件夹“嵌入式Linux系统开发实验”里面的内容到PC机的桌面上2、Mincom的设置(参考文档“ Linux系统下超级终端minicom的使用方法”)(1) 启动Linux后,选择应用程序t附件t终端,单击右键,选择将该启动器添加到桌面,此时, 会在桌面上会出现一个终端的快捷键。(2)

8、双击桌面上的终端,打开一个终端。(可同时打开多个终端)在命令提示符下,输入:#minicom - s回车,即可进行minicom的参数设置:波特率115200,数据位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样初 莉対血 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) 设置完成后保存为默认配置文件。应用程序 位蚤 系统 芒感巳& 叵文件 编辑© 查看陋 终端 标签 稱助妊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) 退出设置界面,可以看到

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) 连接好开发板与PC机的串口线,启动开发板,如看到如下画面,说明mini com已设置好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.才術20 : g .會届3、安装交叉编译器(在PCM Linux终端环境下进行)参考文档“嵌入式Linux系统交叉编译器的制作”所需软件包: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目录下出现一个2.95.3的目录,将此目录下的/bin目录添加到环境变量中去export PATH=/usr/local/arm/2.95.3/bi n:$PATH(6) 用上述方法添加的环境变量在掉电后会丢失,因此,可以使用在“/etc/bashrc ”的最后一行添加以上命令。# vi /etc/bashrc应用程序恆置系统 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、 查看该路径是否已添加到环境变量中。#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内核(在PC机Linux终端环境下进行) 参考文档“ ARMLinu内核” 所需软件包:kernel2410.tgz步骤;(1) 在/目录下新建一个名为S3C2410的目录。# mkdir s3c

18、2410(2) 将kernel2410.tgz复制到 s3c2410目录中# cd / s3c2410/ 进入 s3c2410目录# tar zxvf kernel2410.tgz/解压 kernel2410.tgz(3) 编译内核。# cd /s3c2410/ 2.4.18-rmk7# make menuconfig/进入2.4.18-rmk7 目录执行make menuconfig命令,进行内核配置。kernel_2410.cfg。(也可根据自身需要定制内核,具体(4) 进入主界面后,装载默认配置文件 请参考文档“ Linux内核编译配置选项”)(4) 设置完成后,建立依赖关系,编译内核#

19、 makes dep# make zlmage(5) 编译结束后,在arch/arm/boot目录下生成了 Linux内核的压缩映像zlmageo5、下载内核映像到开发板:(1) 使用tftpcmd网络传输,设置PC机IP地址,与实验平台的IP地址(BIOS勺IP地址)设置在 同一网段内。这里,将PC勺IP设为8,将实验平台的IP地址设为00。并 把tftpcmd复制到/bin文件夹下。(2) 进入boot 目录:#cd/s3c2410/ 2.4.18-rmk7/arch/arm/boot(3) 将开发板与PO用交叉网线连接好,设置好 minicom

20、,复位开发板,按住A键,进入BIOS命 令行状态提示符,输入命令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输入如下内容:tftpcmd 00 69 put zImage要下载的文件(5)双击down批处理文件,选择在终端运行,或是输入如图所示命令./down,将内核映像下载到开发板。(注意: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”,选择第二个区 块,输入“

25、Y”确认将文件烧写到nandflash中。£应用程序位豎系统 叵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?实验四编写应用程序1实验内容:在目标板上 Linux环境下运行“ 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可执行文件# arm-linux-gcc - o helloworld helloworld.c(3) 将程序下载到目标板并执行将可执行文件下载到目标平台FS2410P目前主要有三种方式: 通过网络下载:通过网络下载程序的主要步骤是:先把 helloworld复制到ftp共享目 录,然后在FS2410上使用ftp下载。(请查阅相关资料自行完成) 通过NFSS入映射(可参考文档nfsonARMSYS.pd)设置NF洪享目录一一编辑PC机端NFS勺相关文件# vi /etc/exports/s3c2410 192.168.*(rw)# exportfs# /etc/rc

31、.d/i nit.d/nfs start/修改/exports 文件,在文件中输入以下内容/ s3c2410为P(机共享给目标平台的目录/ 192.168.*.*(rw)为可访问共享目录的网段/通知系统共享目录改变了,每次修改目录后,/要运行此命令来告诉系统此变化/启动NF驭务启动NFS服务:确定关掉NFS配额:确定启动NFS守护进程:确定启动NFS mountd:确定将其防火墙设为禁用关闭防火墙,选择系统一一管理一一安全级别防火墙,2 ft请为您的系统选择安全级别。阴火墙选项®SELinux S)B方火7禁用信怪的服务: FTP NF540 SSH : .j ITi L .j0 l

32、elnet /(HTTP,-其它端口 X取消©Q确定去掉iptables服务,选择系统管理 services 在弹出的界面中,将iptables、ip6tables 前面的 “V” 去掉。在minicom中,启动Linux后,在命令提示符下输入:# mount 8:/s3c2410 /tmp/ 挂载共享目录到目标板PC机的IP地址PC机端共享给目标板的目录 目标板的挂载目录# cd /tmp#. /hellworld/进入到目标板的挂载目录下/执行该目录下的helloworld 可执行文件。注意:如果NFS moun不成功,主要从以下几方面查找原因:是否在修改P

33、(机IP之后没有重新激活网络检查P(机和目标板Linux系统中的IP是否在同一个网段段内目标板查看IP命令:ifconfig eth0目标板更改 IP 命令:ifconfig eth0 * * * *输入要设置的IP地址,每次目标板的板Linux系统重启后都要重新设置。或修改根文件系统/usr/etc/rc.local 文件中的IP,重新制作根文件系统,烧写到目标板,这样就可以把改变的IP保存到FLASH,根文件系统的制作和烧写办法参考后面。可在PC端 mount NFS 目录,看是否成功,如果成功,说明NFSE置正确./在PC机终端进行如果按上述方法配置还mount不成功NF洪享目录,可删去

34、PC端的DNS地址和网关地址,重新激活网络,并重新启动 NFS艮务:# /etc/rc.d/init.d/nfs restart实验五根文件系统的制作1实验参考:FS2410P实验指导手册v242.pdf 312 313页及文档“制作Linux根文件系统”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目录下的内容压缩。# cd cha ng这时,将在chang目录下产生一个名为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可执行文件到/s3

36、c2410/guo/bin目录下(6) 现在开始制作cramfs根文件系统#. /mkcramfs /s3c2410/guo FS2410XP camare demo.cramfs制作根文件系统的工具,要把 m kcramfs命令拷贝到当前目录目标文件名制作根文件系统的源目录在/s3c2410/guo目录下,生成了新的根文件系统 FS2410XP_camare_demo.cramfs根文件系 统的下载,烧写方法同内核映像一样。将新的根文件系统下载,烧写进Nanflash的第三个区块, 复位目标板,启动Linux,在命令提示符下输入:/在minicom终端进行#. /helloworld/ 执行

37、 helloworld 程序Hello, world!/ 执行结果可看到如上结果。实验六嵌入式Linux设备驱动程序开发1. Linux设备驱动程序开发流程进行嵌入式Linux系统的开发,很大的工作量是为各种设备编写驱动程序。在 AR平台上开 发嵌入式Linux设备驱动程序与在其他平台上开发是一样的。总的来说,实现一个嵌入式 Linux 设备驱动的大致流程如下:(1) 查看原理图,理解设备的工作原理(2) 定义主设备号(3) 在驱动程序中实现驱动的初始化。如果驱动程序采用模块的方式,则要实现模块初始化。 设计所要实现的文件操作,定义file_operations结构。(5)实现中断服务(中断并

38、不是每个设备驱动所必须的) 编译该驱动程序到内核中,或者用insmod命令加载(7) 测试该设备可参考文档“ Linux设备驱动程序介绍”。2. Linux下字符设备驱动开发实例一一LEE3区动(可参考FS2410实验指导手册v2.12pdf ,302-313)(1)实验内容:4个LED丁轮流闪烁本实验要求实现在一个字符设备驱动里面实现对 GPIO端 口的操作。在模块加载的时候跑马灯运行起来模块卸载的时候,跑马灯停止。FS2410吐的4个LED旨示灯由4个I/O 口控制,它们分别是:GPF GPF7输出低电平时候,相应的LED旨示灯亮(2) LED勺原理图图1 LED原理图FS2410带有4个

39、用户可编程I/O方式LED图1所示为LE硬件原理图,下表为LED寸应的I/O 口 表1指示灯占用的I/O 口列表序号名字CPU端 口资源1LED1GPF42LED2GPF53LED3GPF64LED4GPF71 GPi1 GPF1 GPFC1 GPF7(3) LED驱动源代码及说明在/s3c2410下新建一个目录:gpiodrv#mkdir /s3c2410/gpiodrv#cd /s3c2410/gpiodrv在/s3c2410/gpiodrv目录下用vi编辑器编写符合上面功能的驱动源程序 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驱动同样,在/s3c2410/gpiodrv目录下用vi编辑器编写该驱动程序的 Makefile文件:(Makefile 的编写可参考Makefile中文教程.pdf)#vi Makefile输入以下内容: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字符设备的驱动开发实例一测试LED(1)在/s3c2410/gpiodrv目录下用vi编辑器编写led驱动程序相应的测试程序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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论