type
Post
status
Published
slug
2023/02/19/Linux-study-make-a-driver-change
summary
第一行内核代码修改!
tags
开发
Linux
Arch
category
Linux
icon
password
new update day
Property
Oct 22, 2023 01:31 PM
created days
Last edited time
Oct 22, 2023 01:31 PM
1 修改VM下的驱动
我的 Linux 开发环境是基于 virtualbox 配置的,所以进行第一次的驱动修改测试也是针对 VM 下的驱动。
所有 VM 映像中包含的一个驱动程序是
e1000
驱动程序,即 Intel 以太网驱动程序。如果您本机运行 Linux,则需要寻找不同的驱动程序。有关如何找到合适的驱动程序的信息,请参阅下一个驱动程序部分。e1000
驱动程序位于内核的网络部分:intern@ubuntu:~/git/kernels/staging$ ls drivers/net/ethernet/intel/e1000/ e1000_ethtool.c e1000.h e1000_hw.c e1000_hw.h e1000_main.c e1000_osdep.h e1000_param.c Makefile
让我们对 e1000 驱动程序的探测功能做一个小改动。加载驱动程序时调用探测函数。让我们编辑
e1000_main.c
文件:vim drivers/net/ethernet/intel/e1000/e1000_main.c
接下来,找到探测功能。您可以通过在标准模式下键入
“/”
来搜索文本。找到 probe
函数后,向其添加一行 printk
:static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct net_device *netdev; struct e1000_adapter *adapter; struct e1000_hw *hw; printk(KERN_DEBUG "I can modify the Linux kernel!\n"); static int cards_found = 0;
然后键入
:wq<enter>
保存文件并退出。printk
函数导致将消息写入内核日志缓冲区,然后可以使用 dmesg
命令查看该消息。2 编译更改
通过运行
make
(使用可选的 -jN
标志)重新编译您的内核:您可能需要修复一些编译错误。还要修复由于您的更改而产生的任何新警告。在 Linux 内核中,开发者们努力确保驱动程序不会在任何系统(包括 32 位和 64 位系统,以及不同的体系结构,例如 PPC、ARM 或 x86)上产生警告。可能不会合并会产生额外警告的新功能或错误修复补丁。
3 安装更改后的内核
编译驱动程序后,您需要通过运行以下命令来安装更改:
如果你还没有配置好 Linux 内核开发环境,可以参考下面的链接。
4 测试更改
由于您已经编译了一个全新的内核,您需要重新启动到那个新内核以测试您的模块更改。重新启动您的 VM(或计算机),然后运行:
dmesg | less
通过键入
“/I can modify”
在日志文件中搜索您的 printk
。您应该能够在引导期间的驱动程序输出中找到此消息。例如下面的输出:
5 参考资料
欢迎加入“喵星计算机技术研究院”,原创技术文章第一时间推送。
- 作者:tangcuyu
- 链接:https://expoli.tech/articles/2023/02/19/Linux-study-make-a-driver-change
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章