linux 内核编译arm,如何编译ARM的linux驱动

在电脑的linux上安装了ARM2440的linux交叉编译器. 现在我按照网上的资料写了个简单的hello驱动.

#include

#include

#include

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

{

printk(KERN_ALERT "Hello, worldn");

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT "Goodbye, worldn");

}

module_init(hello_init);

module_exit(hello_exit);

Makefile文件如下:

//Makefile

ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else

KDIR:=/lib/modules/$(shell uname -r)/build

PWD:=$(shell pwd)

all:

$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

endif

clean:

rm -f *.o *.ko *.mod.c .hello*

编译OK. insmod运行这个驱动也正常. 我想问如何让我的这个驱动也可以工作在2440上面并从传口打印Hello. world. 是否需要修改编译选项还是什么文件?

另外在2440提供的linux BSP中的i2c驱动头文件有#include 这些头文件和我上面的那个hello.c中的init.h是否是同一个文件?

|

1、

你要在arm板上加载模块,就要进行交叉编译

添加 CC=arm-linux-gcc在你的makefile里面

就使用了交叉工具

2、

你的KDIR也要修改,你系统要生成你arm内核的库文件,在内核原代码中使用make modules-install 就会在lib/modules下生你arm版的内核文件

在把KDIR指向那个文件就可以了

3、

你所指的两个文件应该差不多,自己可以比较一下用diff命令比较

也要看你系统内核的版本和你arm2440提供内核的版本是不是接近

|

部分已经在这里答过了

http://topic.csdn.net/u/20081117/15/7dab3735-b32a-4a16-8834-f4d931f189d0.html

多谢两位:

1. 我看了一下2440 arm9的linux bsp驱动的Makefile. 没有看见有arm-linux-gcc. 请且我到i2c驱动目录下make后提示:

make:***无目标. 停止.

【joyself】建议你看看Kernel的一般编译方法。

不一定是arm-linux-gcc的,要看你的交叉编译器到底是是什么前缀

2.是在ARM9提供的linux BSP中内核源码包中使用make modules-install吧. 我可以在源码包中make zImage. 但make modules-install后.提示:

make:***没有规则可以创建目标"modules-install".停止.

[joyself] 是 make modules_install 。 你可以make help看看有哪些选项。

3.如果使用动态加载驱动方式时候. 是否也需要以上步骤? 还是可以可以省去重新编译内核文件这一步.

[joyself] 就是模块加载啊,当然需要编译。

总体建议: 先了解kernel的编译流程。(这个跟是不是arm没有什么关系,通常来说对于arm来说

make时加个ARCH=arm CROSS_COMPILE=xxxxxxxx就ok了,kernel本身就支持多平台的)

|

还有一种可以动态加载驱动的方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值