英语学习机上更新过后上出现err:null啥意思

2453人阅读
linux开发(113)
linux关键字(4)
内核中判断返回指针是否错误的方法:使用或者。
内核空间是一个有限的空间,而在这有限的空间中,其最后一个page是专门保留的,也就是说一般人不可能用到内核空间最后一个page的指针.换句话说,你在写设备驱动程序的过程中,涉及到的任何一个指针,必然有三种情况,一种是有效指针,一种是NULL,空指针,一种是错误指针,或者说无效指针.而所谓的错误指针就是指其已经到达了最后一个page.比如对于32bit的系统来说,内核空间最高地址0xffffffff,那么最后一个page就是指的0xfffff000~0xffffffff(假设4k一个page).这段地址是被保留的,一般人不得越雷池半步,如果你发现你的一个指针指向这个范围中的某个地址,那么你的代码肯定出错了。
这里不仅不是浪费一个page,反而是充分利用资源,把一个东西当两个东西来用.
宏MAX_ERRNO(定义为4095)是最大错误号,Linux内核中,出错有多种可能.关于Linux内核中的错误,我们看一下include/asm-generic/errno-base.h文件:
最常见的几个是-EBUSY,-EINVAL,-ENODEV,-EPIPE,-EAGAIN,-ENOMEM.这些是每个体系结构里都有的,另外各个体系结构也都定义了自己的一些错误代码.这些东西当然也都是宏,实际上对应的是一些数字,这个数字就叫做错误号.而对于Linux内核来说,不管任何体系结构,最多最多,错误号不会超过4095.而4095又正好是比4k小1,即4096减1.而我们知道一个page可能是4k,也可能是更多,比如8k,但至少它也是4k,所以留出一个page出来就可以让我们把内核空间的指针来记录错误了.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:820209次
积分:6129
积分:6129
排名:第3200名
原创:46篇
转载:182篇
评论:39条
(4)(2)(3)(1)(4)(3)(8)(1)(2)(1)(1)(2)(5)(2)(5)(6)(1)(3)(1)(8)(5)(1)(6)(2)(1)(4)(3)(2)(1)(3)(2)(1)(16)(2)(3)(6)(15)(10)(11)(13)(17)(10)(11)(3)(6)(1)(10)

我要回帖

 

随机推荐