arm驱动编译
⑴ 请教一个驱动编译路径的问题
EXEC = leds
OBJS = leds.o
SRC = leds.c
INCLUDE = /mnt/linux-2.6.21-hc9261
CC = armv5l-linux-gcc
LD = armv5l-linux-ld
MODCFLAGS = -O2 -Wall -D__KERNEL__ -DMODULE -I$(INCLUDE) -march=armv4t -c -o
LDFLAGS = -r
all: $(EXEC)
⑵ 驱动编译进内核和编译模块的区别
第一次把自己编译的驱动模块加载进开发板,就出现问题,还好没花费多长时间,下面列举出现的问题及解决方案1:出现insmod:errorinserting'hello.ko':-1Invalidmoleformat法一(网上的):是因为内核模块生成的环境与运行的环境不一致,用linux-2.6.27内核源代码生成的模块,可能就不能在linux-2.6.32.2内核的linux环境下加载,需要在linux-2.6.27内核的linux环境下加载。a.执行uname-r//查看内核版本b.一般出错信息被记录在文件/var/log/messages中,执行下面命令看错误信息#cat/var/log/messages|tail若出现类似下面:Jun422:07:54localhostkernel:hello:versionmagic'2.6.35.6-45.fc14.i686.PAE'shouldbe'2.6.35.13-92.fc14.i686.PAE'则把Makefile里的KDIR:=/lib/moles/2.6.35.6-45.fc14.i686.PAE/build1改为KDIR:=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1//改成自己内核源码路径(这里的build1是一个文件链接,链接到/usr/src/kernels/2.6.35.6-45.fc14.i686.PAE和13-92的)然并卵,我的fedora14/usr/src/kernels下并没有2.6.35.13-92.fc14.i686.PAE,只有2.6.35.13-92.fc14.i686,虽然不知道两者有什么区别,但改成2.6.35.13-92.fc14.i686还是不行,照样这个问题,还好后来在看教学视频的到启发法二:改的还是那个位置KDIR:=/opt/FriendlyARM/linux-2.6.32.2//把这里改成你编译生成kernel的那个路径all:$(MAKE)-C$(KDIR)M=$(PWD)molesARCH=armCROSS_COMPILE=arm-linux-//加这句2.[70685.298483]hello:molelicense'unspecified'taintskernel.[70685.298673]方法:在模块程序中加入:MODULE_LICENSE("GPL");3.rmmod:chdir(2.6.32.2-FriendlyARM):Nosuchfileordirectory错误解决方法:lsmod可查看模块信息即无法删除对应的模块。就是必须在/lib/moles下建立错误提示的对应的目录((2.6.32.2)即可。必须创建/lib/moles/2.6.32.2这样一个空目录,否则不能卸载ko模块.#rmmodnls_cp936rmmod:chdir(/lib/moles):Nosuchfileordirectory但是这样倒是可以卸载nls_cp936,不过会一直有这样一个提示:rmmod:mole'nls_cp936'notfound初步发现,原来这是编译kernel时使用makemoles_install生成的一个目录,但是经测试得知,rmmod:mole'nls_cp936'notfound来自于busybox,并不是来自kernel1).创建/lib/moles/2.6.32.2空目录2).使用如下源码生成rmmod命令,就可以没有任何提示的卸载ko模块了[luther.gliethttp]#include#include#include#include#include#includeintmain(intargc,char*argv[]){constchar*modname=argv[1];intret=-1;intmaxtry=10;while(maxtry-->0){ret=delete_mole(modname,O_NONBLOCK|O_EXCL);//系统调用sys_delete_moleif(retread_proc=procfile_read;////Our_Proc_File->owner=THIS_MODULE;Our_Proc_File->mode=S_IFREG|S_IRUGO;Our_Proc_File->uid=0;Our_Proc_File->gid=0;Our_Proc_File->size=37;printk("/proc/%screated\n",procfs_name);return0;}voidproc_exit(){remove_proc_entry(procfs_name,NULL);printk(KERN_INFO"/proc/%sremoved\n",procfs_name);}mole_init(proc_init);mole_exit(proc_exit);[html]viewplainifneq($(KERNELRELEASE),)obj-m:=proc.oelseKDIR:=/opt/FriendlyARM/linux-2.6.32.2#KDIR:=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1PWD:=$(shellpwd)all:$(MAKE)-C$(KDIR)M=$(PWD)molesARCH=armCROSS_COMPILE=arm-linux-clean:rm-f*.ko*.o*.mod.o*.mod.c*.symversendifmake后生成proc.ko,再在开发板上insmodproc.ko即可执行dmesg就可以看到产生的内核信息啦
⑶ Qt creator 可以编写ARM linux的驱动吗
QT主要是应用于上层应用软件的开发,一般不能做驱动的开发,驱动层是跟操作系统内核早颂紧密关联的。qmake是QT的编译命令,make是GCC的编译命令。做驱动用什么还得看你是要给什么操作信散系统添加设备。如果是windows就用WIN ddk吧,如果是Linux就用gcc,前者是一个类似于VC的集成开发环境,后者只是一个编陆坦郑译器。可以用任意的文本编辑器写代码,然后写Makefile,编译出驱动。
⑷ ARM linux设备驱动,写的驱动必须在编译内核的时候添加到内核才能用吗比如led驱动,我生成
linux2.6以后的内核在加载驱动的时候是可以动态添加的,不用每次添加之后都make zImage,
你只用先编译一边,然后就可以一直用这个做驱动的开发喽,
只要生成了led.ko,然后insmod led.ko,就可以了,至于是不是用应用层,我觉得你还是先学一下应用层的东西吧,比如nuix系统高级编程之内的书,
⑸ linux系统下编译的驱动模块如何在arm上运行
arm驱动和x86驱动并不通用,Linux的驱动不能用在arm上
⑹ 为ARM开发的linux驱动程序,应该怎么编译得到.o文件
编译驱动是要和内核相关的,你的这个Mafefile是没问题,你查查你的/weke/kernel/s3c2410_kernel2.4.18_rel那个内核有没有交叉编译过
内核里面有Makefile,所以你编译驱动的时候指定内核路径后,会用编译内核的交叉编译工具编译,然后你试一下make default
⑺ 为什么每款ARM电脑都需要专门为它编译的内核,而x86的可以通用
就算是电脑巨头的英特尔和AMD,也有针对操作体统的驱动或者叫补丁的。而arm架构具体的实施更乱,很难一个驱动通吃,打补丁实属正常。
x86经过多年发现,在pc这块已经成为一个分工配合协调的产业链,无论是AMD还是INTEL,会发现他们每山绝代都有个主板范围,这里面涉及的主要就是芯片组、接口、一系列的设计规范,本质上虽然主机品牌不同、配置不同,但是都是一个模式出来的。
相比起来arm涉及的软硬件平台就太多了,甚至芯片本身的设计都千差万别,所以需要单独去定制,目前市面辩隐上还没有像pc这种通用的各自搞一部分的模块化设计。逗灶姿
⑻ 如何用arm-linux-gcc编译驱动程序,Makefile文件怎么写
回复
http://bbs.chinaunix.net/viewthread.php?tid=1921952
上面说的方法我还是不是很明白啊,我现在简直没办法了,昨天晚我看到一个资料上面写的helloworld驱动的例子有两份Makefile,一份是x86机子上的,一份是arm平台上的,arm上的这样写:ifneq
($(KERNELRELEASE),)obj-m:=hello.oelseKDIR/usr/src/kernels/opt/EmbedSky/linux-2.6.30.4/all:
make
-C
$(KDIR)
M=$(PWD)
moles
ARCH=arm
CROSS_COMPLIE=arm-linux-clean:
rm
-f
*.ko
*.o
*.mod.o
*.mod.c
*.symversendif看到后我想应该是要用用于移植的内核来编译吧,于是我干脆把资料提供的内核拷贝到PC的Linux系统中然后解压、编译直至安装,然后就再模仿例子写了Makefile如上所示,然后make后终于通过编译成功了,然后我再下载到arm板上安装,却又出现下面的错误:insmod:
can't
insert
'hello.ko':
unknown
symbol
in
mole,
or
unknown
parameter。我就又彻底晕了。到底是怎么回事,应该怎么办的呢?
⑼ 如何用arm-linux-gcc编译驱动的,烦劳告诉我完整命令 ,如果可以的话 把整个流程告诉我下,多谢了
简单的告诉你
yum install gcc* -y
⑽ 在linux下编译驱动程序,用arm-linux-gcc编译时出现了很多错误
不改橡漏makefile文件,当然不能编译羡卖了,linux的驱动就是这么搞的啊,没办法的,反正是批处理的,也就多花点时间嘛,你可以把一些不需要的驱动,选择不编译,这样就能加快速度了。给你个办法,在windows虚拟机中安装交叉编译环境,你可以在windows下编辑你的程序,linux只起到编译的作用,这样,两个工作可以兄如逗同时进行,有空你还可以上上网,这样你就不觉得时间长了。