最近想學習一下linux驅動,看了一些書和教學視頻,大概瞭解了一下,不過要想深入,肯定需要實踐。手上有幾塊linux的板子,最終選擇了樹莓派作爲我的實驗平臺,資料比較豐富,接口也比較簡單。
程序員的入門經典當然就是hello world程序了,我的第一個實驗就是要搭建實驗環境和工具鏈,通過交叉編譯的方式,在上位機完成hello world驅動程序的編寫,最終在板子上運行。
一、安裝樹莓派系統
二、下載交叉編譯工具鏈
$ git clone git://github.com/raspberrypi/linux.git RpiLinux
$ git clone git://github.com/raspberrypi/tools.git RpiTools
需要注意的是下載的時候要注意內核代碼是否和我們板子中的內核版本相同,我使用的是3.6.11+,所以下載代碼的時候也要選擇3.6.y這個版本。
三、編寫驅動代碼
#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
----------------------------------------------------------------
歡迎大家轉載我的文章。
轉載請註明:轉自古-月
歡迎繼續關注我的博客