树莓派内核模块交叉编译

一、 获得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插入模块

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值