学习下 linux 数模程序驱动的编写,本节我们实现的功能是实现三路
ADC 数模转换。
驱动程序
驱动程序的名字:“itop4412_adc.c”。
要想把这个驱动注册到内核,先把这个驱动程序放到内核的“driver/char”目录下面,如
下图所示:
Makefile
然后打开 drive/char 目录下面的 Makefile,添加:
obj-$(CONFIG_ADC_CTL) += itop4412_adc.o
如下图所示:
添加完成后保存退出。
Kconfig
打开“drive/char”目录下面的 Kconfig,搜索“LEDS_CTL”,找到之后在下面添加
“DS18B20_CTL”,仿照着“LEDS_CTL”写就可以了,添加内容如下:
config 3LADC_CTL
bool "Enable 3LADC config"
default y
help
Enable 3LADC config
添加完成后如下图所示:
修改完成后保存退出。
添加设备到平台文件
最后使用命令“vim arch/arm/mach-exynos/mach-itop4412.c”,打开平台文件。添
加设备,参考 led 的驱动,添加内容一如下:
#ifdef CONFIG_ADC_CTL
struct platform_device s3c_device_adc_ctl = {
.name = "adc_ctl",
.id = -1,
};
#endif
添加完成后如下图所示:
添加内容二如下:
#ifdef CONFIG_ADC_CTL
&s3c_device_adc_ctl,
#endif
添加完成后如下图所示:
修改完成后保存退出。
内核的编译
内核在编译之前应该先对其进行参数配置。具体讲解可以参考 itop-4412 开发板精英使
用手册 5.3.2,这里以 SCP 2G 核心板为例编译 zImage 内核镜像,那么配置文件为
config_for_linux_scp_elite 使用命令 cp cconfig_for_linux_scp_elite .config 配置,
在内核目录下使用 make menuconfig 命令打开内核配置界面,进入 “Device Drivers
--->”→“Character devices --->”→“ADC driver for iTOP4412”,如下图所示,配置
上宏 定义“ADC_CTL”。
配置完成后保存退出,以免出错可以再查看一遍,然后使用编译命令“make zImage”
编译内核。编译完成后在目录
“/home/topeet/android4.0/iTop4412_Kernel_3.0/arch/arm/boot”下找到新生成的
zImage 编译到开发板,启动开发板。开发板启动之后,使用命令“ls
/sys/devices/platform/”可以查看到新注册的 adc_ctl 设 备,如下图所示。
如下图所示,加载之后使用命令“ls /dev”,可以看到新生成了设备节点 adc。
测试程序
名字:“adctest.c”
在 Ubuntu 系统下新建 ada 文件夹,将写好的 “adctest.c” 拷贝到文件夹下,使用
“arm-none-linux-gnueabi-gcc -o adctest adctest.c -static”命令编译应用。 如下图所
示。
将上图中的文件“adctest” 拷贝到 U 盘。 启动开发板,将 U 盘插入开发板,使用命
令“ mount /dev/sda1 /mnt/udisk/”加载 U 盘符, 有三条命令运行小应“adctest”,
第一条使用命令“./mnt/udisk/adctest 0 0”,运行小应用 “adctest”,如下图所
示:
调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。
滑动变阻器向顺时针旋转,阻值会减小,最小为 0;
滑动变阻器向逆时针旋转,阻值会增大,最大为 10k。
第二条使用命令“./mnt/udisk/adctest 1 0”,运行小应用 “adctest”,如下图所
示:
调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化
滑动变阻器向顺时针旋转,阻值会减小,最小为 0;
滑动变阻器向逆时针旋转,阻值会增大,最大为 10k。
第三条使用命令“./mnt/udisk/adctest 1 1”,运行小应用 “adctest”,如下图所
示:
调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。
滑动变阻器向顺时针旋转,阻值会减小,最小为 0;
滑动变阻器向逆时针旋转,阻值会增大,最大为 10k。