Github: idr_replace
Email: BuddyZhang1 buddy.zhang@aliyun.com
目录
源码分析
idr_replace() 用于替换 ID 绑定的指针。参数 idr 指向 IDR 根节点;参数 ptr
指向需要替换的指针;id 参数指向 ID。函数首先判断被替换的内容是不是内部节点,
如果是内部节点,那么返回 EINVAL 错误码。修改 id 的值,减去 idr->idr_base
的值。接着调用 _radix_tree_lookup() 函数查找 id 对应的 slot 已经父节点。
如果 slot 不存在,或者 radix_tree_tag_get() 获得值为真,那么直接返回 ENOMEME,
最后调用 __radix_tree_replace() 函数替换 slot 接口的值,以此实现替换
ID 绑定的指针。
实践
驱动源码
驱动安装
驱动的安装很简单,首先将驱动放到 drivers/BiscuitOS/ 目录下,命名为 atomic.c,
然后修改 Kconfig 文件,添加内容参考如下:
接着修改 Makefile,请参考如下修改:
驱动配置
驱动配置请参考下面文章中关于驱动配置一节。在配置中,勾选如下选项,如下:
具体过程请参考:
Linux 5.0 开发环境搭建 – 驱动配置
驱动编译
驱动编译也请参考下面文章关于驱动编译一节:
Linux 5.0 开发环境搭建 – 驱动编译
驱动运行
驱动的运行,请参考下面文章中关于驱动运行一节:
Linux 5.0 开发环境搭建 – 驱动运行
启动内核,并打印如下信息:
驱动分析
修改 ID 绑定的指针。
附录
BiscuitOS Home
BiscuitOS Driver
BiscuitOS Kernel Build
Linux Kernel
Bootlin: Elixir Cross Referencer
搭建高效的 Linux 开发环境
赞赏一下吧 🙂