Alb*_*ore 5 c linux build linux-kernel
好的,我正在阅读有关Linux内核开发的内容,并且有一些使用内核数据结构和内容的代码片段.假设我想试验它们,例如,有一个非常简单的片段:
#include <../../linux-2.6.37.1/include/linux/sched.h>
struct task_struct *task;
for_each_process(task) {
printk("%s[%d]\n", task->comm, task->pid);
}
Run Code Online (Sandbox Code Playgroud)
看起来很简单,嗯?现在,我无法构建这个东西.我正在使用NetBeans.sched.h是正确的文件,好像可以用CTRL +点击它,一个被带到正确的文件.
我是否需要以某种方式包含我的示例文件并从Makefile 构建整个内核?我只是希望看到它的构建,并可能它会起作用.如果我需要构建整个内核,我将如何实际测试我的东西?
因为我对内核开发很陌生,所以我必须做一些非常愚蠢的事情.我有点失落.
多谢你们!
您不需要编译整个内核,但您必须至少创建一个内核模块,它更容易编译.你应该看看教程,比如本,甚至是一个完全成熟的书像这样.
请记住,并非所有内核代码都可以移动到模块 - 只是那些使用内核的公共(导出)接口的模块.内核核心部分(例如VM或调度程序)固有的代码可能无法从内核的其余部分访问.
还要记住,不建议在开发机器上尝试内核代码 - 轻微的错误很容易导致整个系统崩溃.您应该在单独的虚拟机中尝试尝试内核代码,例如在VirtualBox中.
使事情变得更难的细节:通常,您只能在为其构建的内核中插入模块.当且仅当内核相同时,才能在测试VM上使用在主机系统上编译的模块,即来自相同分发的相同内核包版本.考虑到您将要升级主机分发,我认为在测试系统上构建模块更简单.
由于您需要一个完整的C开发套件,您应该安装一个流行的Linux分发版.它应该更稳定,您可以访问其用户社区.如果要保持其大小,可以只安装没有X服务器或图形应用程序的基本系统.
BTW Netbeans旨在开发用户空间应用程序.您可以根据内核代码调整它,但它永远不会像用户空间编程那样适合.事实上,没有IDE真的适合.无法从用户空间运行内核代码(更不用说使用单独的VM),这会破坏IDE自动化的正常edit-> compile-> run-> debug工作流程周期.
大多数内核开发人员只使用带有C语法高亮的加强编辑器,例如Vim或Emacs.Emacs实际上是一个IDE(以及更多),但是,正如我上面提到的,你不能轻易地使用基于IDE的工作流来进行内核代码开发.
| 归档时间: |
|
| 查看次数: |
914 次 |
| 最近记录: |