樹莓派linux驅動學習之hello world

        最近想學習一下linux驅動,看了一些書和教學視頻,大概瞭解了一下,不過要想深入,肯定需要實踐。手上有幾塊linux的板子,最終選擇了樹莓派作爲我的實驗平臺,資料比較豐富,接口也比較簡單。

        程序員的入門經典當然就是hello world程序了,我的第一個實驗就是要搭建實驗環境和工具鏈,通過交叉編譯的方式,在上位機完成hello world驅動程序的編寫,最終在板子上運行。

一、安裝樹莓派系統

        首先要在樹莓派上安裝系統,這個網上的資料比較多,就不細說了,我使用的是2013-09-25-wheezy-raspbian,下載地址可見:http://www.raspberrypi.org/downloads
          最終搭建的平臺如下,後期的通訊可以直接使用串口,就不需要HDMI輸出了: 
        

二、下載交叉編譯工具鏈

        交叉編譯工具鏈可以幫助我們在PC機上完成驅動程序的開發,此外還需要和下位機配套的Linux內核代碼,樹莓派官方已經爲我們提供了相應的內核代碼和工具鏈,直接使用git下載:
    $ git clone git://github.com/raspberrypi/linux.git RpiLinux
    $ git clone git://github.com/raspberrypi/tools.git RpiTools

需要注意的是下載的時候要注意內核代碼是否和我們板子中的內核版本相同,我使用的是3.6.11+,所以下載代碼的時候也要選擇3.6.y這個版本。

三、編寫驅動代碼

我們在上位機編寫hello world的代碼:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT"Hello, world\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT"Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);
相應的makefile代碼:
ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else
	
KDIR := /home/hcx/work/boards/RPi/kernel/linux-rpi-3.6.y
all:
	make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=/home/hcx/work/boards/RPi/kernel/RpiTools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-

clean:
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers  modul*

endif

編譯完成後,我們通過U盤將hello.ko文件拷貝到樹莓派中,然後通過insmod插入模塊,結果如下:

----------------------------------------------------------------

歡迎大家轉載我的文章。

轉載請註明:轉自古-月

http://blog.csdn.net/hcx25909

歡迎繼續關注我的博客


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章