Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Linux上第一个驱动+应用程序:LED灯闪烁

实现功能:运行Linux系统,点亮ARM开发板上的LED1,间隔200ms闪烁。1.      根据硬件电路编写驱动2.      编写Makefile和Kconfig3.      编译加载:静态加载和动态加载静态加载:make menuconfig选择模块是[*]编译进内核,然后make zImage编译内核,最好将image文件放到SD卡或NFS启动内核即可。动态加载:make menuconfig选择模块是[M]编译进内核,然后meke modules编译模块,生成.ko文件,将其发送到ARM开发板里面,使用命令insmod进行加载,用lsmod进行查看,用modinfo查看详细信息,用rmmod删除。4.      编写应用程序:应用程序需要打开驱动模块fd = open("/dev/ leds",0),然后调用ioctl控制LED。5.      交叉编译 :arm-linux-gcc led1.c -o led1,得到led1执行文件(注意权限需为可执行)。6.      用串口/FTP/NFS下载到开发板的/usr/bin文件下。7.      在开发板可以手动运行,开发本上的LED灯闪烁。如果要开机自启动,则继续下面操作。8.      在/etc/rc.d/init.d下添加led1脚本,实现两个功能,一个是start启动,即运行/usr/bin/led1;另一个功能是关闭led1,即查找LED1进程ID,然后杀死此进程。在运行过程中可以用/etc/rc.d/init.d/led1 start | stop实现开闭。脚本内容如下:#!/bin/shbase=led1case "$1" in  start)                /usr/bin/$base &        ;;  stop)        pid=`/bin/pidof $base`        if [ -n "$pid" ]; then                kill -9 $pid        fi        ;;esacexit 09.      在/etc/init.d/rcS中添加如下内容,这样可以实现开机自动启动。注:Linux运行Bootloader,加载内核,启动后运行的第一个程序是init.d里的程序,此处运行等级rcS也就是rc1,单用户模式。/etc/rc.d/init.d/led1 startecho "                        " > /dev/tty1echo "Starting led1 service..." > /dev/tty1                               echo "10.  reboot,实现开机自启动。注意:在Linux下加载驱动程序可以采用动态和静态两种方式。静态加载就是把驱动程序直接编译到内核里,系统启动后可以直接调用。静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译下载内核,效率较低。动态加载利用了Linux的module特性,可以在系统启动后用insmod命令把驱动程序(.o文件)添加上去,在不需要的时候用rmmod命令来卸载。在台式机上一般采用动态加载的方式。在嵌入式产品里可以先用动态加载的方式来调试,调试完毕后再编译到内核里。
另可参考:Linux上第一个驱动程序:hello http://www.linuxidc.com/Linux/2016-03/129597.htm本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-03/129598.htm