当前位置:  技术问答>linux和unix

如何编译ARM的linux驱动

    来源: 互联网  发布时间:2016-04-26

    本文导语:  在电脑的linux上安装了ARM2440的linux交叉编译器. 现在我按照网上的资料写了个简单的hello驱动. #include   #include   #include   MODULE_LICENSE("Dual BSD/GPL");      static int hello_init(void)  {      printk(KERN_ALERT "Hello, worldn"...

在电脑的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本身就支持多平台的)

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

    
 
 

您可能感兴趣的文章:

  • 动态编译与静态编译驱动程式疑问?
  • 在cygwin编译驱动程序要不要交叉编译?
  • 谁编译过PLX9054 Linux的驱动程序,我给100分教我编译和安装??
  • 请问做好的驱动,发布给用户的时候,用户必须要在各自的Linux中重新编译驱动源码才能使用吗?
  • 2.6.x驱动的编译如何指定编译工具?
  • ubuntu编译驱动问题
  • !请问,新下载的驱动程序该如何编译进内核呢?
  • 将驱动模块编译进内核是否有用??
  • rndis驱动编译成内核模块
  • 驱动模块编译调试问题、、????
  • 怎样交叉编译2.6内核下的驱动?
  • Linux下PCI驱动,怎么解决不同版本内核都需要重新编译的问题??
  • 求助,关于编译驱动进内核的一个问题,实在找不到资料了!
  • 关于网卡驱动编译的问题
  • 怎样编译多个文件的驱动???
  • 驱动怎么不能静态编译进内核?
  • 驱动模块编译进内核的小问题~~~~~~~~
  • 在redhat开发驱动时,需要下载一个linux源码,编译,替掉原有的内核吗?
  • 驱动编译insmod问题,100分相送,在线等待,有效马上结贴
  • php iis7站长之家
  • linux/centos源码安装nginx编译配置选项参数介绍
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • linux 64位编译出错。linux 32位可以编译过。
  • 关于在linux交叉编译powerpc-e300c3-linux-gcc的编译问题
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • linux下有没有能编译出16bit代码的C语言编译器?
  • 现要在一台Pentium100上安装LINUX操作系统,能不能不选用别的品牌的LINUX,而直接用内核编译,然后再加上编译器和SHELL等等其它东西?如
  • linux下可以编译c但是如何编译c++
  • arm-linux-gcc交叉编译出错,但gcc编译没错,什么原因呢???
  • 何处有 Linux 内核编译配置详细的中文介绍? 我在重新配置编译时老是出错:-(
  • 想问一下,编译LINUX内核时,是否可以只编译其中的一个模块?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • 请教:JSP编译器编译成字节码,跟别的编译器编译出来的有什么不同呢?
  • 高速的网络抓包库PF_ring介绍及编译安装
  • 编译GCC时能不能只编译C/C++的编译器?
  • 关于arm交叉编译器4.3.3编译程序报错,但是3.4.5却能编译通过的问题
  • JB下,我的程序编译得好慢!请问用什么方法编译才可以快一点?或编译顺序改变一下?
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • 用JCreator写了一个小程序,有十几个class,当修改某个文件重新编译,javac并没有编译修改的文件,请问要如何做javac才会重新编译所有的
  • 问:关于gcc编译器和g++编译器
  • 关于如何把编译进内核的编译成模块
  • C编译器 c++编译器 wieldylcc
  • PROC开发时 //注释编译不通过 如何设置使用cpp编译。
  • 编译失败后如何再继续编译
  • 编译qt-x11,最后编译生成可执行文件时候,make出错
  • 如何查看已编译安装软件的编译命令行
  • 请问哪里有反编译.class文件的反编译器?
  • 用Jdk编译时出现提示要加 -deprecation 再编译,请教??
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • 编译到最后,既不报错,也编译不成功
  • 建立较差编译环境,编译gcc-3.4.4出错
  • 求一个编译好的的gcc编译器


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3