如何在Ubuntu上安装内核对应的源码来编译驱动?

发布于 2022-09-03 07:32:11 字数 3475 浏览 15 评论 0

最近在学驱动模块,平台是ARM,因为课上老师讲的有点显浅,所以打算自己再深入研究一下。
所以在虚拟机里面装了ubuntu,打算用来深入学习。
目前的版本是

# uname -a
Linux ubuntu-ldm 4.4.0-28-generic #47-Ubuntu SMP Fri Jun 24 10:09:13 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

我已经安装了以下的包

# dpkg -l | grep linux
ii  console-setup-linux                  1.108ubuntu15                            all          Linux specific part of console-setup
ii  libselinux1:amd64                    2.4-3build2                              amd64        SELinux runtime shared libraries
ii  linux-base                           4.0ubuntu1                               all          Linux image base package
ii  linux-firmware                       1.157.2                                  all          Firmware for Linux kernel drivers
ii  linux-generic                        4.4.0.28.30                              amd64        Complete Generic Linux kernel and headers
ii  linux-headers-4.4.0-28               4.4.0-28.47                              all          Header files related to Linux kernel version 4.4.0
ii  linux-headers-4.4.0-28-generic       4.4.0-28.47                              amd64        Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii  linux-headers-generic                4.4.0.28.30                              amd64        Generic Linux kernel headers
ii  linux-image-4.4.0-28-generic         4.4.0-28.47                              amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-28-generic   4.4.0-28.47                              amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-generic                  4.4.0.28.30                              amd64        Generic Linux kernel image
ii  linux-libc-dev:amd64                 4.4.0-28.47                              amd64        Linux Kernel Headers for development
ii  linux-sound-base                     1.0.25+dfsg-0ubuntu5                     all          base package for ALSA and OSS sound systems
ii  linux-source                         4.4.0.28.30                              all          Linux kernel source with Ubuntu patches
ii  linux-source-4.4.0                   4.4.0-28.47                              all          Linux kernel source for version 4.4.0 with Ubuntu patches
ii  util-linux                           2.27.1-6ubuntu3.1                        amd64        miscellaneous system utilities

并且将/usr/src/linux-source-4.4.0.tar.bz2解压到/home/test/WorkSpace/Kernel/linux-source-4.4.0
然后写了一个小小的测试程序

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init (void) {
        printk (KERN_ALERT "Hello, World\n");
        return 0;
}

static void hello_exit (void) {
        printk (KERN_ALERT "Goodbye, cruel world\n");
}

module_init (hello_init);
module_exit (hello_exit);

Makefile

obj-m += module.o

module-objs := hello.o

all:
        make modules M=`pwd` -C /home/test/WorkSpace/Kernel/linux-source-4.4.0

clean:
        make modules clean M=`pwd` -C /home/test/WorkSpace/Kernel/linux-source-4.4.0

令我不解的是

# sudo insmod module.ko
insmod: ERROR: could not insert module module.ko: Invalid module format

实在想不通为何没法装载这个内核模块?
是因为我用错了版本的源码嘛?
难道是要用自己编译的uImage来启动系统才可以嘛?
要如何自己手动编译替换Ubuntu的内核?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文