浅谈内核态和用户态的变量互访问题

    今天确实挺累的,眼睛迷迷糊糊,可能是看了一个月电视剧的原因。早上花了半个小时一直在研究从mask转换到数值的一个数学问题,脑子成浆糊,常量写了好多遍都不对,跑出来的结果反推回去推了几遍也推错了。最后,发现&写成&&,眼睛花了脑子也不好使。最后查一下mask的格式,终于解决了问题。不过,mask到数值只是我写着安慰自己的,最后还是老老实实改成数值推到maks。

     后来,就被几个同事拉过去帮他们看问题。老实说,他们的代码我都看不见,就听他们涛涛不绝的说,我也没听进去多少。最后,去操作几遍总算帮他们确定了一些问题。然后再回来继续写代码。其中有一个问题是一个变量是static,但是却在另一个文件中调用。

   写着写着,发现需要在用户态引用内核态的一个数据。我也不管那么多,先试在内核态定义全局变量在用户态使用,再试一下内核态在用户态调用。实在不行,我又自己瞎搞了一会。下午实在没办法了,去找同事帮忙。然后,同事给我找了一个例子。我看着例子,基本上把流程看完了,就开始写。不知道是不是自己脑子糊涂了,一会写错一个函数名,搞的牛头不对马嘴,再加上我怀疑自己使用的不对,光重新编译就花了一个小时。中间又去搭自动化环境,改自动化入参,又浪费了好长时间。最后只好晚上加班,把问题搞定。

   虽然,我只写了用户态调内核态变量。但是想一想,内核态调用户态也是可以的,就是比较繁琐。

   首先,说一下用户态使用内核态数据,由于用户态可以主动陷入内核态所以这个比较简单,直接一个ioctr就行了。ioctr把cmd和参数(引用或指针)传给内核态,内核态根据具体的cmd,调用内核态函数,把变量给参数。然后内核返回用户态。整个代码的逻辑就是这样,不要被代码调来调去搞晕。

    那么,内核态如何获取用户态数据呢。首先,在内核态定义一个全局变量。然后,用户态的数据一变化就ioctr到内核态,内核态修改内核态定义的变量,在内核态某个地方使用就可以了。当然,可能不希望内核态的代码受用户态的数据的改变而改变。所以这个情况也是比较少的。

转载于:https://my.oschina.net/u/2245760/blog/368305

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值