一、 获得ARM GCC 交叉编译器
官网下载可能比较慢,可以csdn资源下载 为 bcm2708hardfp编译器,和官方一样的
http://download.csdn.net/detail/canyue102/6725615
安装该编译器,把编译器路径加入到环境变量中:
gedit ~/.bashrc
在最后一行添加:
export PATH=$PATH:/your_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/
然后终端查看
arm-bcm2708hardfp-linux-gnueabi-gcc -v
然后就安装好交叉编译器了.
二、获取树莓派官方内核
使用git下载,我的板子使用的内核版本是3.18,因此我下载的版本就是rpi-3.18.y-rebase版本
mkdir raspeberrypi_src
cd raspberrypi_src
git clone -b rpi-3.18.y-rebase --single-branch git://github.com/raspberrypi/linux.git
如果上面的命令中–single-branch 识别不了,升级你的git版本即可
进入内核目录:
编辑根目录下的Makefile文件,找到下面相似语句,修改为下面:
ARCH ?= arm
CROSS_COMPILE ?= arm-bcm2708hardfp-linux-gnueabi-
获得内核配置文件
在运行的树莓派中运行:
ls /proc/
可看到一个叫config.gz的文件,他是当前的树莓派配置选项记录文件,我们将他拷出
在linux内核源码下执行:
zcat config.gz > .config
然后只需要make就开始编译内核了,时间会有点长,先睡一觉
三、编写驱动代码
我们在上位机编写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
进入此目录直接make即可
编译完成后,我们通过U盘将hello.ko文件拷贝到树莓派中,然后通过insmod插入模块