嵌入式Linux系统系列培训
基于JXARM9-2410-1实验
嵌入式Linux中驱动程序的编写(静态加载方式,模块(动态)加载方式)与应
用程序开发。
分5个步骤:
① 数码管驱动程序seg和应用程序segtest编译; ② 修改驱动程序seg虚拟地址空间――smdk.c;
③(静态或动态)加载驱动程序seg到linux内核(zImage); ④ 修改文件系统Ramdisk.gz,将应用程序segtest加入其中; ⑤ 下载linux内核和文件系统,并自动运行应用程序运行。
一、 在Linux下编译驱动程序,以学习机上的数码管显示驱动Seg应用程序为例。
数码管显示驱动和应用程序包括seg.h,seg.c,segtest.c,segc四个文件,其中seg.h,seg.c是驱动程序,segtest.c是调用驱动的应用程序,segc是编译文件。
DEVICE_NAME: “char_dev” (seg.c定义) MAJOR_NUM: 96 (seg.h定义) DEVICE_FILE_NAME: “seg” (seg.h定义)
1. 将WinXP下的seg目录下的四个文件复制到VMware中的linux中的/home/cvtech/jx2410/examples/seg目录下。
采用两种方法将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中的E:\\seg\\下的文件,复制到VMware->linux下的/home/cvtech/jx2401/examples/seg中。
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_IO,0,1,0,0
退出vi并保存(wq)。 如图1:
编译新修改的内核: $make zImage 下载到目标机: