linux内核模块的编译,Linux内核(模块)编译和安装

以下内容在 Virtualbox  + ubuntu 3.11.10.6下测试通过

准备编译环境和下载内核源码

sudo apt-get build-dep --no-install-recommends

linux-image-$(uname -r)

apt-get source linux-image-$(uname -r)

内核编译和安装

make menuconfig

make

sudo make modules_install

sudo make install

重启搞定!

删除旧的内核

旧的内核还可以启动,建议留着以防万一。

如果清理了旧内核,需要更新grub列表

sudo update-grub2

创建内核模块

内核版本的Hello World

如果你不幸遇到如下诡异的问题

MODPOST 0 modules

那一定是从Windows粘贴文本的错,请把Makefile重新手敲一遍就可以了!应该是CR/LR/TAB格式的问题!

自动加载内核模块

sudo cp hello.ko /lib/modules/$(uname -r)/kernel/

sudo depmod

测试看看

modinfo hello

sudo modprobe hello

lsmod |grep hello

dmesg |grep -i hello

你会看到这个,并不影响加载

hello: module verification failed: signature and/or required key

missing - tainting kernel

设置自动加载

方法1

sudo vi /etc/modules

增加一行

hello

方法2

sudo vi /etc/init.d/hello

添加以下内容

#!/bin/sh -e

modprobe hello

sudo chmod 777 /etc/init.d/hello

创建启动脚本链接

sudo ln -s /etc/init.d/hello /etc/rcS.d/Shello

重启试试看!

dmesg |grep -i hello

编译进内核

在内核代码的drivers下创建hello目录,并拷贝hello.c进去。

创建Kconfig文件,内容如下

config HELLO

tristate "Hello world module"

help

a simple kernel module

创建Makefile文件,内容如下

obj-$(CONFIG_HELLO) += hello.o

修改drivers下的Kconfig和Makefile,以包含新加的hello模块。

make menuconfig

在Device Drivers下找到Hello world module选项,选择为“*“。

make

sudo make modules_install

sudo make install

重启,查看结果

cat /proc/kallsyms |grep hello

可以看到hello的符号已经注册了

但是

dmesg |grep -i hello

却没有任何信息,为啥呢?

注掉hello.c里的MODULE宏定义,再make & make

install就搞定了!原来刚才hello模块的初始化代码根本没有被执行,原因如下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值