在应用程序里调用ioctl去获取所连接的无线设备。
在调用的驱动里加printk打印,所获得的无线设备的mac地址全部正确。
但在应用程序里,调用完ioctl之后,只有第一个无线设备的mac地址是正确的,剩下的显示都不对。
这是跟用户空间指针有关吗?,应该如何解决这个问题啊?
linux内核空间能正常显示mac地址,到了用户空间就显示有问题
答案:2 悬赏:70 手机版
解决时间 2021-02-20 16:46
- 提问者网友:箛茗
- 2021-02-19 18:03
最佳答案
- 五星知识达人网友:蕴藏春秋
- 2021-02-19 18:32
在内核态能够直接操作的地址一定必须是0xc0000000-0xffffffff之间的,这个范围之外的地址都会发生缺页异常,要访问用户态的地址空间的话,只能先将用户地址空间转换到内核地址空间;
用户空间地址-》物理地址-》内核空间地址-》操作
比如在内核态要将0x08048100处的赋值10;
先通过0x08048100查页表得到其物理地址A,
如果A<896M,那么就 *(0xc000_0000+A)=10;
如果A>896M(高端内存),就需要通过内核动态映射区将物理地址A映射到内核地址空间B,然后*B=10;
B的值在范围(0xc0000000+896M,0xffffffff)之间;
用户空间地址-》物理地址-》内核空间地址-》操作
比如在内核态要将0x08048100处的赋值10;
先通过0x08048100查页表得到其物理地址A,
如果A<896M,那么就 *(0xc000_0000+A)=10;
如果A>896M(高端内存),就需要通过内核动态映射区将物理地址A映射到内核地址空间B,然后*B=10;
B的值在范围(0xc0000000+896M,0xffffffff)之间;
全部回答
- 1楼网友:毛毛
- 2021-02-19 19:34
不是
是freebsd,unix的一个主要分支
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯