代码改变世界

安卓移植和驱动开发第七章心得体会

2016-06-05 19:44  软件1304孙涛  阅读(246)  评论(0编辑  收藏  举报

第七章 Led为我闪烁

尽管 Linux 驱动直接与硬件打交道,但并不是 Linux 驱动直接向硬件中的内存写数据, 而是与本机的内存(νO Memory,位于内核空间〉进行交互。所谓 1/0 内存是通过各种接口(PCI、USB、蓝牙、以太网口等〉连接到主机( PC、手机〉的硬件〈网卡。声卡、摄像头等〉在主机内 存中的映射。例如,在 Ubuntu Linux 上运行的驱动只需要访问运行 Ubuntu Linux 的主机中的内存即可,然后Linux内核会利1/0内存中的数据硬件交互。

如果在不同Linux内核版本之间的移植,主要是移植第1 部分( Linux驱动的内部处理,一般Linux 内核版本相差较大时,Linux内核的APl 会有很大差别),如果在不同硬件平台(如在不同开发板之间的移植)的移植,主要是移植第2部分。当然,在一些情况不, Linux 驱动的移植基本上相当于重新编写一遍Linux 驱动,在这种情况下,就要更好地了解Linux 驱动的高级技术,在后面的章节将深入地介绍Linux 驱动的这些技术,以便读者可以驾轻就熟地编写Linux 驱动。1.创建LED驱动的设备文件

使用cdev_init函数初始化cdev;指定设备号 ;Linux设备文件的设备号分为主设备号和次设备号,前12位主设备号,后20位表示次设备号。设备号指定方法:直接在代码中指定(硬编码),动态分配,多个Linux设备文件可以拥有同一个主设备号。但两个设备的主设备号和次设备号不都能一样。使用cdev_add函数将字符设备添加到内核中德字符设备数组中。使用class_create宏创建struct class。使用device_create函数创建设备文件

2.卸载Led驱动的设备文件

依次调用三个方法:

Void device_destroy(struct class *class,dev_t devt)

Void class_destroy(struct class *cls)

Void unregister_chrdev_region(dev_t from,unsigned count)

3.设置寄存器与初始化LED驱动

4.控制LED

通过字符串控制LED;通过I/O命令控制LED

5.LED驱动的模块参数

如果Linux驱动中有多个模块参数,需要将这些参数用单引号或双引号括起来

LED 驱动可以使用如下两种方式控制:LED通过字符串控制;通过命令控制LED。在将LED灯代码编写完成后,然后进行LED灯的测试。也可以使用JAVA测试LED灯驱动。测试完成后可以将LED灯移植。