1、编译LED驱动
led_drv.c(驱动源文件) + Makefile(编译工具)---->led_drv.ko(驱动安装文件)
1)修改Makefile文件
根据Linux内核源码的目录:
gec@ubuntu:~/linux-3.0.8$ pwd
/home/gec/linux-3.0.8
修改:
obj-m += led_drv.o
KERN_DIR=/home/gec/linux-3.0.8
PWD = $(shell pwd)
modules:
$(MAKE) -C
(
K
E
R
N
D
I
R
)
M
=
(KERN_DIR) M=
(KERNDIR)M=(PWD) modules
clean:
$(MAKE) -C
(
K
E
R
N
D
I
R
)
M
=
(KERN_DIR) M=
(KERNDIR)M=(PWD) modules clean
2)编译驱动源文件
gec@ubuntu:~/linux-3.0.8$ cd /mnt/hgfs/led_drv_ok/
gec@ubuntu:/mnt/hgfs/led_drv_ok$ ls
led_drv.c Makefile
gec@ubuntu:/mnt/hgfs/led_drv_ok$ make
make -C /home/gec/linux-3.0.8 M=/mnt/hgfs/led_drv_ok modules
make[1]: 正在进入目录 /home/gec/linux-3.0.8' CC [M] /mnt/hgfs/led_drv_ok/led_drv.o Building modules, stage 2. MODPOST 1 modules CC /mnt/hgfs/led_drv_ok/led_drv.mod.o LD [M] /mnt/hgfs/led_drv_ok/led_drv.ko make[1]:正在离开目录
/home/gec/linux-3.0.8’
3)生成了ko文件
2、将led_drv.ko下载到试验箱
[root@FriendlyARM /]# mkdir test
[root@FriendlyARM /]# cd test
[root@FriendlyARM /test]# rx led_drv.ko
CCC
开始 xmodem 传输。 按 Ctrl+C 取消。
100% 73 KB 7 KB/s 00:00:10 0 Errors
[root@FriendlyARM /test]# ls
led_drv.ko
3、安装led灯的驱动
[root@FriendlyARM /test]# insmod led_drv.ko
[ 1338.922853] module init …
[root@FriendlyARM /test]# lsmod
led_drv 2196 0 - Live 0xbf1e1000
4、查看生成的设备文件
[root@FriendlyARM /test]# ls /dev/led_drv -l
crw-rw---- 1 root root 200, 0 Jan 1 14:06 /dev/led_drv
通过/dev/led_drv 设备文件就可以访问LED驱动了。
5、在project中增加led.h头文件
#ifndef LED_H
#define LED_H 1
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
#define LED_ON 1
#define LED_OFF 0
int led_ctrl(int led_num, int led_state);
#endif /!LED_H/
6、在project中增加led.c应用程序
定义一个函数:
int led_ctrl(int led_num, int led_state)
{
int fd_led;
fd_led = open("/dev/led_drv", O_RDWR);
char led_buf[2];
led_buf[1]=led_num;
led_buf[0]=led_state;
write(fd_led, led_buf, 2);
close(fd_led);
return 0;
}
7、修改project的main.c
#include “led.h”
例:led2 亮
原来:
printf(“led2 on\n”);
改成:
led_ctrl(LED2, LED_ON);
8、修改project的Makefile文件
在里面添加led.c的编译过程
9、下载project的应用程序,控制LED
10、关闭试验箱上跑马灯程序
试验箱自带了跑马灯的程序,需要关闭。修改试验箱的启动脚本文件—/etc/init.d/rcS
[root@FriendlyARM /test]# vi /etc/init.d/rcS
输入“i”,进入插入模式
#/etc/rc.d/init.d/leds start
注释掉上面这行
输入“Esc”键,返回命令模式
:wq
保存退出。
重启试验箱
[root@FriendlyARM /test]# reboot