Linux LED驱动实验

地址映射

是虚拟空间到物理空间的映射,也叫做地址映射
ioremap 函数
ioremap 函数用于获取指 定 物 理 地 址 空 间 对 应 的 虚 拟 地 址 空 间。
ioremap 有三个参数,
phys_addr :要映射的物理起始地址。
size :要映射的内存空间大小。
mtype ioremap 的类型,可以选择 MT_DEVICE MT_DEVICE_NONSHARED
MT_DEVICE_CACHED MT_DEVICE_WC ioremap 函数选择 MT_DEVICE
iounmap 函数
卸载驱动的时候需要使用 iounmap 函数释放掉 ioremap 函数所做的映射。ioremap 只有一个参数 addr ,此参数就是要取消映射的虚拟地址空间首地址。

I/O 内存访问函数

读操作函数
读操作函数有如下几个:
示例代码 41.1.2.1 读操作函数
1 u8 readb ( const volatile void __iomem * addr )
2 u16 readw ( const volatile void __iomem * addr )
3 u32 readl ( const volatile void __iomem * addr )
readb readw readl 这三个函数分别对应 8bit 16bit 32bit 读操作,参数 addr 就是要
读取写内存地址,返回值就是读取到的数据。
写操作函数
写操作函数有如下几个:
示例代码 41.1.2.2 写操作函数
1 void writeb ( u8 value , volatile void __iomem * addr )
2 void writew ( u16 value , volatile void __iomem * addr )
3 void writel ( u32 value , volatile void __iomem * addr )
writeb writew writel 这三个函数分别对应 8bit 16bit 32bit 写操作,参数 value 是要
写入的数值, addr 是要写入的地址。

测试

编写LED驱动程序和ARM应用程序

编写:略

编译驱动程序

编写 Makefile 文件,
1 KERNELDIR := /home/zipeng/linux/myKernel/linux-imx
rel_imx_4.1.15_2.1.0_ga_alientek
......
4 obj-m := led.o
......
11 clean :
12 $(MAKE) -C $(KERNELDIR) M = $(CURRENT_PATH) clean
make -j4

编译测试 APP

输入如下命令编译测试 ledApp.c 这个测试程序:
arm-linux-gnueabihf-gcc ledApp.c -o ledApp

加载根文件系统测试

加载驱动

depmod  //第一次加载驱动的时候需要运行此命令
modprobe led.ko //加载驱动

创建/dev/led节点

mknod /dev/led c 200 0

测试节点

./ledApp /dev/led 1   //打开 LED
./ledApp /dev/led 0   //关闭  LED

卸载驱动

rmmod led.ko

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值