歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux上第一個驅動+應用程序:LED燈閃爍

實現功能:運行Linux系統,點亮ARM開發板上的LED1,間隔200ms閃爍。

1.      根據硬件電路編寫驅動

2.      編寫Makefile和Kconfig

3.      編譯加載:靜態加載和動態加載

靜態加載: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/sh

base=led1

case "$1" in

  start)

                /usr/bin/$base &

        ;;

  stop)

        pid=`/bin/pidof $base`

        if [ -n "$pid" ]; then

                kill -9 $pid

        fi

        ;;

esac

exit 0

9.      在/etc/init.d/rcS中添加如下內容,這樣可以實現開機自動啟動。注:Linux運行Bootloader,加載內核,啟動後運行的第一個程序是init.d裡的程序,此處運行等級rcS也就是rc1,單用戶模式。

/etc/rc.d/init.d/led1 start

echo "                        " > /dev/tty1

echo "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

Copyright © Linux教程網 All Rights Reserved