我现在正在编写一个arm9平台linux下的一个的can测试程序,测试通过之后,再封装成为一个驱动程序。 我现在的问题是:用户空间能否直接调用in()&out()对arm9的内存空间进行访问?(主要是一些寄存器的读写操作比如说inl(0xffffff60)等等)。我在程序中使用了这些函数,编译好之后,在target中运行的时候,出现segmentation fault错误,难道是我的测试程序中io端口读写函数优先级别不够?我在程序中加了iopl(3)函数调用(这个...
看了网上很多关于i386平台上添加系统调用的文章,但我的是在arm平台上。
我是这样添加的:
在/kernel/sys.c 中添加函数 asmlinkage int sys_mycall(int ){}
在 arch/arm/kernel/call.S中添加 .long SYMBOL_NAME(sys_mycall)
在 include/asm/unistd.h 中添加 #define __NR_mycall 222
写c代码:
include
#define bwMCDR2_ADDRESS 4 #define bsMCDR2_ADDRESS 17 #define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS) #define BIT_MASK(_bf)(((1U<<(bw##_bf))-1)<<(bs##_bf) #define SET_BITS(_dst,_bf,_val)\ ((_dst)=((_dst)&~(BIT_MASK(_bf))) | (((_val)<<(bs##_bf))&(BIT_MASK(_bf)))) SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumber); 没看懂他做的什么和怎么做的。
我在x86下使用GNU gcc编译的程序在移植到arm上出现问题 是不是因为arm使用的linux内核的gcc与x86上的GNU的gcc有区别? 如果有的话,能否给点这方面的资料或介绍的网站等等 谢了!