IS_ERR_VALUE等宏的理解

一、关于Linux内核非法地址(网上搜加自己总结)

  1、对任何一个指针,必然有三种情况:一种是有效指针,一种是NULL,空指针,一种是错误指针,或者说无效指针

  2、32位CPU,内核空间占用虚拟地址(0xc0000000~0xffffffff)3~4G虚拟地址(线性地址?)

  3、其中最后一个page(假设4K大小)的地址为(0xfffff000~0xffffffff)为预留地址,指向这个地址的指针都是非法指针

二、错误码跟非法指针啥关系

  1、<asm-generic/errno-base.h> 中规定了通用错误码1-34 <linux/err.h>中定义了 #define MAX_ERRNO  4095 最大错误码为4095

  2、插一段代码,看内核如何返回错误码。可以看出,在错误码前面加上一个负号就变成了返回值

/* Check type and command number */
	if (_IOC_TYPE(cmd) != SPI_IOC_MAGIC)
		return -ENOTTY;

3、继续以-ENOTTY为例,ENOTTY的值为25,-ENOTTY的值是多少呢。负数在计算机中以二进制补码形式存储。

      补码=~源码+1(源码按位取反后加1)

      那么-25的补码就为 0xFFFFFFE7。仔细看一下这个值,在0xfffff000~0xffffffff之间,所以它就是个错误指针。

     

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值