您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页Linux数码管驱动详细过程

Linux数码管驱动详细过程

来源:飒榕旅游知识分享网
嵌入式Linux系统系列培训

基于 JXARM9-2410-1 实验

嵌入式Linux中驱动程序的编写(静态加载方式,模块(动态)加载方式)与应 用程

序开发。

分5个步骤:

① 数码管驱动程序seg和应用程序segtest编译; ② 修改驱动程序seg虚拟地址空间 ---- smdk.c;

③ (静态或动态)加载驱动程序 seg到linux内核(zlmage); ④ 修改文件系统Ramdisk.gz,将应用程序segtest加入其中; ⑤ 下载linux内核和文件系统,并自动运行应用程序运行。

一、 在Linux下编译驱动程序,以学习机上的数码管显示 驱动Seg应用程序为例。

数码管显示驱动和应用程序包括 seg.h, seg.c, segtest.c segc四个文件,其 中seg.h, seg.c是驱动程序,segtest.c是调用驱动的应用程序,segc是编译文 件。 DEVICE_NAME: char_deV' MAJOR_NUM: 96

DEVICE_FILE_NAME: seg'

(seg.c 定义) (seg.h 定义) (seg.h 定义)

1.

四个文件复制到

/home/cvtech/jx2410/examples/seg 目录下。

将 WinXP下的seg目录下的VMware中的linux中的

采用两种方法将 winxp中的文件夹映射到 VMware中的linux系统中。 方法①:(共享目录)

在VMware中,选择;

VM > Settings > Option, 选 shared folders, eg:e:\\seg Add 共享文件夹

在 VMware 下的 linux 中,显示的文件夹为: /mnt/hgfs/seg 方法② : (TFTP)

通过tftp将winxp中的seg文件夹中的文件复制到 VMware中的linux中, 具体步骤:

a) 改 winxp 主机 IP 为 192.168.1.160,子网掩码为: 255.255.255.0,其

它不填

b) 在 VM > Linux 中,输入:

$ifconfig eth0 192.168.1.180/ (激活 IP) (Linux login:root, password:123456)

c) 在 Winxp 下启动 tftp,设置 e:\\seg为目录,server interface:192.168.1.160 d) 在 VM > linux 中,执行

$cd /home/cvtech/jx2401/examples/ $mkdir seg/ $cd seg/

$tftp 192.168.1.160/ Tftp > get *

. /(get seg.c按照文件名 copy,copy 完,q 退出)

$chmod 777 */ (设置刚复制的文件属性为可读写)

以上步骤,则将 winxp 中的 /home/cvtech/jx2401/examples/seg中。

下的文件,复制到 VMware->linux 下的

2. Linux下的seg编译步骤:

$cd /home/cvtech/jx2410/examples/seg/

$./segc/ (seg.c批处理编译脚本,生成segtest应用程序和seg.o) $cp seg.o /tftpboot $cp segtest /tftpboot

修改驱动程序所涉及到的虚拟地址空间

Linux系统中不允许应用程序直接访问设备的物理地址,所有的物理地址需 要转换为虚拟地址。

$cd /home/cvtech/jx2401/linux/arch/arm/mach-s3c2410 $vi smdk.c/

在map_desc_smdk_io_desc[]结构体中增加数码管物理地址 0x1000006的映 射。

0xd3000000, 0x10000000, 0x01000000, DOMAN」0,0,1,0,0

退出vi并保存(wq )。 如图1:

编译新修改的内核: $make zlmage 下载到目标机:

在DNW中,执行: JX2410#run loadl in ux 启动Linux后

#mount 192.168.1.180:/tftpboot /mnt/nfs (在目标机上映射主机(虚拟机)

tftpboot目录为目标机的/mnt/nfs 目录)

#cd /mnt/nfs/ #insmod seg.o

#mknod /dev/seg c 96 0/ #segtes/

(运行应用程序)

(创建设备文件名)

三、修改 Linux内核,加载驱动程序到嵌入式 Linux内核

zlmage 中,并设置系统启动时自动运行应用程序(调用

驱动)

在Linux中,执行以下命令:

1. $cd /home/cvtech/jx2410/linux/ 2. $cd driver/char/ 3. $vi config.in / 项)

在 vi 中,查找 \\ support S3C2410 TouchScreen 在其下行加入新驱动程序支持项 Support …SEG

通过这里在菜单中进行添加。

如图2 :

source dr her s/ser l/Ginf ig 卜 in

S.r; |u:.i i z J-udnSO>F I G.S3C24 ] 0 TanEOlEEN $O>F I G^AROLS3G2410ckp.ista

(进入嵌入式 Linux 路径)

(修改menuconfig界面内容,增加新的驱动程序选

SLG UJbtlG_S3C24JO.SEG $(JCN^IG„aMOLS3C2410

4. $vi Makefile

Obj += seg.o

(在Makefile中增加对新驱动程序编译的语句,如图 2:

通过这里来确定编译的文件

如图3: obj_ OC^F IG_£ abj -$ {IN' IG S: J11

TOUCH

+= seg .o

+=

10-1 s

5. 复希9 seg.h,seg.c到/home/cvtech/jx2410/linux/driver/char 文件夹下,

$cp /home/cvtech/jx2410/examples/seg/seg.h . $cp /home/cvtech/jx2410/examples/seg/seg.c . 6. 回到Linux文件夹下,

$cd /home/cvtech/jx2410/li nux

7. 在虚拟机界面中,选中新的驱动,并保存退出

执行:

$make menuconfig

找到字符设备 Character Device,选中并选择support SEG(NEW)(按空格 两次选中),保存退出。 8. 执行:

$make zlmage/

/tftpboot/ 下)

(重新生成带新驱动程序的内核,并自动复制到

以下斜体字为动态加载linux内核和运行segtest应用程序方法: 下载到目标机: 在DNW中,执行: JX2410#run loadl in ux

#mount 192.168.1.180:/tftpboot /mnt/nfs / (在目标机上映射主机(虚拟

机)tftpboot目录为目标机的 /mnt/nfs 目录)

#cd /mnt/nfs/

#mknod /dev/seg c 96 0/

(创建设备文件名)

这里已经不在需要insmod seg.Q因为已经编译进内核。 #./segtes!(运行应用程序)

以上步骤完成了将新驱动程序加入到嵌入式 Linux内核中,并采用动态加载 设备驱动和运行程序。 若要系统启动时能自动运行segtest应用程序,还需要修 改文件系统Ramdisk.gz,将应用程序segtest放入到Ramdisk.gz中,并注册驱动 设备号。

四、修改文件系统 Ramdisk.gz ,将应用程序 segtest放 入到其中,并注册驱动程序设备号

seg。

1. $cd /home/cvtech/jx2410/root/ (进入 root 路径)

2. $./exramfs/ (执行脚本文件,解压缩文件系统 Ramdisk.gz) 3. $cd rd/etc/i nit.d / 4. $vi rcS/

(加入注册设备名语句,并加入执行文件名和路径 )

键入“i”进入写入模式,在适当的位置加入如下语句: mknod /dev/seg c 96 0/ /bin/segtes/

(注册驱动设备名)

(系统启动后自动执行应用程序)

按“ EsC键,敲入“ wq”保存退出。 如图4: e cho ' m)un l crani's'

nlnod /dev/fbO c 2料 0 rrknod /dev/1s r 254 0 nknod /dev/ranfi b I 5

nek nod /dev/d irec t io c ] 99 | tiknod /dev /jieg c 96 0 /bin/seg it sI

5. 复制segtest应用程序到文件系统中的bin文件夹下,执行:

$cp /home/cvtech/jx2410/examples/seg/segtest

/home/cvtech/jx2410/root/bin|/

6. 重新压缩文件系统Ramdisk.gz,执行以下命令: $cd /home/cvtech/jx2410/root/ $./mkramfs/

/tftproot/ 下)

$cp ramdisk.gz /tftpboot

(执行脚本文件,压缩文件系统 Ramdisk.gz,并自动复制到

五、 下载文件系统 Ramdisk.gz 和 Linux 内核 zImage 到 目标机

中, 并重新启动实验箱, 使 linux 系统启动时自动 运行应用程序。

打开实验箱 电源, 在 PC 机的 Windows XP 环境 启动 DNW

(Com1:,11520bp9 ,在DNW中执行如下命令:

JX2410#run loadlinux (下载 Ramdisk.gz和 zImage到目标机中,并重新 启动 linux 系统。 )

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务