主题 : 编写驱动问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 9823
精华: 0
发帖: 33
金钱: 225 两
威望: 81 点
综合积分: 66 分
注册时间: 2009-10-15
最后登录: 2017-09-13
楼主  发表于: 2009-12-09 16:46

 编写驱动问题

我最近学习编写驱动,在裸机的led灯程序想写成驱动,我发现在linux下不能对寄存器直接赋值;
例如 :#define      GPBCON    (*(volatile unsigned long *)0x56000010)

#define    GPB5_out    (1<<(5*2))
#define    GPB6_out    (1<<(6*2))
#define    GPB7_out    (1<<(7*2))
#define    GPB8_out    (1<<(8*2))

GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out;

当测试我写的驱动的时候就会出现段错误,是不是不能这样赋值啊?
但是在linux内核中可以这么赋值啊!!!请问下怎么解决啊??
         
级别: 新手上路
UID: 9823
精华: 0
发帖: 33
金钱: 225 两
威望: 81 点
综合积分: 66 分
注册时间: 2009-10-15
最后登录: 2017-09-13
1楼  发表于: 2009-12-09 17:29
没人吗??

是不是内核版本在2.6就不能这么配置了????
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
2楼  发表于: 2009-12-09 19:41
不懂这个
估计是linux把sfr的位置重新映射到3g以上的空间了吧
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-12-09 21:37
Linux内核在运行的时候开启了MMU,像这种对物理的地址的直接操作当然会出错。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."