Linux内核(模块)编译和安装(编译更新ubuntu内核 _ 自动加载模块 _ 自动加载驱动)

 

 

以下内容在 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)

https://help.ubuntu.com/community/Kernel/Compile/

内核编译和安装

make menuconfig
make
sudo make modules_install
sudo make install

重启搞定!

http://en.wikipedia.org/wiki/Menuconfig

删除旧的内核

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

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

sudo update-grub2

创建内核模块

内核版本的Hello World

http://blog.markloiseau.com/2012/04/hello-world-loadable-kernel-module-tutorial/

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

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

编译进内核

http://www.linuxjournal.com/content/kbuild-linux-kernel-build-system

在内核代码的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模块的初始化代码根本没有被执行,原因如下。

http://books.google.com.hk/books?id=ALapr7CvAKkC&pg=PT151&lpg=PT151&dq=do_initcalls&source=bl&ots=gUfEiRiYNr&sig=S3kQ1GnxZlzN1BzVhnvGgloYywM&hl=en&sa=X&ei=iLNgU_nkKMWiugTP_IKQDA&ved=0CHoQ6AEwCQ#v=onepage&q=do_initcalls&f=false

posted on 2017-04-21 09:50  Red_Point  阅读(1489)  评论(0编辑  收藏  举报

导航