实验(15)LED字符型驱动设备
实验目的:通过本实验理解内核中如何控制字符型设备
实验步骤:本实验有三大步骤,每个步骤再细分若干小步骤:
第一步:编译内核,编译驱动程序为模块,具体分解为下列5小步:
(1)编写驱动程序,一般需包含以下重要元素:第一,加载函数和卸载函数;第二,file_operations作为设备操作行为的描述;第三,驱动设备的设备名,这个设备名将作为第三大步中,cat /proc/devices后找到设备名,查找设备号,设备号可以先写为0,由内核自动分配
(2)编写Kconfig文件,修改对应的makefile
(3)通过make menuconfig配置内核,选中第(2)小步增加的配置单,然后make SUBDIR=drivers/char/ modules,编译出驱动模块
下面三小步就是实验(10):
(4)根据实验10生成对应的配置文件,如s3c2440_defconfig
(5)然后覆盖.config文件,可以直接将上面一步的配置文件另存,也可以先把上面一步的文件放到内核根目录下,cp s3c2440_defconfig .config
(6)最后make zImage
下面是各个步骤的详细截图:
编写hello驱动:
1.在drivers/char/下新建EmbedSky_hello.c,发现经过之前步骤已有EmbedSky_hello.c生成
故修改代码如下,其余未变。
2.在相同目录下通过“gedit Kconfig”对Kconfig进行修改,添加内容如图:
3.配置内核,通过make menuconfig配置
再通过命令make SUBDIR=drivers/char/ modules,编译出EmbedSky_hello.ko驱动模块,
将其置于drivers/char/下
将上面生成的EmbedSky_hello.ko复制到lib目录下,如下图:
GPIO口控制驱动的编写:
类似于EmbedSky_hello.ko,生成led驱动的应用程序和模块,生成leds及leds.ko文件
第二步:将配置好的内核zImage.bin和Yaffs文件系统烧写到NandFlash中
1.DNW串口复位后进入下载模式3,烧入之前由虚拟机编译产生的zImage.bin
2.烧写成功后进入下载模式6,烧入云盘提供的Yaffs文件系统镜像:
root_qtopia_2.2.0_2.6.30.4_256MB_20130330.bin
下载完成界面:
3.选择下载模式8进入系统并按enter可出现如下界面:
此时开发板的界面:
第三步:通过SecureCRT启动系统:
1.打开secureCRT串口工具,右键sessions选择quick connect配置信息,串口选择开发板USB端口号:
2.连接串口,输入8进入系统并按Enter键,后输入指令cd tmp进入tmp文件夹,再输入rz回车传输文件,传入如下图所示4个文件add并ok:
修改三个文件权限可读可写可修改:
3.输入insmod EmbedSky_hello.ko加载模块;
输入rmmod EmbedSky_hello.ko卸载模块;
输入insmod leds.ko加载模块。
4.输入cat /proc/devices查看设备号并创建设备节点mknod /dev/leds c 252 0
最后输入应用程序命令:./leds led 1 0 ./leds led 1 1 ./leds led 2 1 ./leds led 2 0
./leds led 3 0 ./leds led 3 1 ./leds led 4 1 ./leds led 4 0
输完上述最后一句最后led灯亮情况:
��验��ы)�F