想在编译的内核中设置一个变量,编译并安装后也可以修改

编译安装或者制作Deb包
回复
去吻她
帖子: 4
注册时间: 2016-10-31 14:50
系统: windows7
送出感谢: 0
接收感谢: 0

想在编译的内核中设置一个变量,编译并安装后也可以修改

#1

帖子 去吻她 » 2016-11-21 20:29

我要对内核里的代码做一点修改,有一行是判定某个变量是否大于一个值。我可否将这个值设置成一个变量,在我编译并安装此内核后不需要重新编译就可以修改此变量的值?这样比较方便我进行调试,否则每次想改都要重新编译,比较麻烦,谢谢!
PS:如何删除自己以前发的主题,提问的有些蠢?没有找到按钮。
头像
astolia
论坛版主
帖子: 3142
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 524 次

Re: 想在编译的内核中设置一个变量,编译并安装后也可以修改

#2

帖子 astolia » 2016-11-22 20:33

一般的做法是在/proc、/sys等地方注册一个接口,比如/proc里就用proc_create()或2.6.25之前的create_proc_entry(),然后在其回调函数中处理写入事件

当然还有偷懒的做法是用printk输出那个变量的地址,从日志中读到那个地址后,用root权限修改/dev/mem或/dev/kmem中的对应位置
去吻她
帖子: 4
注册时间: 2016-10-31 14:50
系统: windows7
送出感谢: 0
接收感谢: 0

Re: 想在编译的内核中设置一个变量,编译并安装后也可以修改

#3

帖子 去吻她 » 2016-11-22 20:35

astolia 写了:一般的做法是在/proc、/sys等地方注册一个接口,比如/proc里就用proc_create()或2.6.25之前的create_proc_entry(),然后在其回调函数中处理写入事件

当然还有偷懒的做法是用printk输出那个变量的地址,从日志中读到那个地址后,用root权限修改/dev/mem或/dev/kmem中的对应位置
我用的是4.8的内核,新手能麻烦您说的再具体点么?或者有tutorial么?
多谢!
头像
astolia
论坛版主
帖子: 3142
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 524 次

Re: 想在编译的内核中设置一个变量,编译并安装后也可以修改

#4

帖子 astolia » 2016-11-22 21:04

想了一下,你这种仅供自己调试的情况可以用简单点的方法。
1、用EXPORT_SYMBOL宏导出你的变量。不知道怎么导自己翻一下内核源码中用到EXPORT_SYMBOL的地方
2、然后/proc/kallsyms里面就会有那个变量以及它在内存中的地址了,在root权限下用grep之类的工具找出来
3、最后就是用普通的文件读写方法写入/dev/kmem中的对应位置,不要告诉我你连最最基本的文件读写都不会
根据你要修改的变量的位置不同,你可能要在编译时关掉CONFIG_STRICT_DEVMEM选项
回复

回到 “编译或打包”