Ubuntu下编译Linux内核和hello模块

本文详细介绍了如何在Ubuntu系统中编译2.6.32版本的Linux内核,并提供了从环境准备到启动内核的全过程指导。此外,还介绍了如何编译和加载一个简单的'hello'模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境准备

        Ubuntu版本信息:
$ uname -a
Linux ubuntu 2.6.32-38-generic-pae #83-Ubuntu SMP Wed Jan 4 12:11:13 UTC 2012 i686 GNU/Linux

下载源码

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2
$ tar -xjvf linux-2.6.32.tar.bz2
$ cd linux-2.6.32

安装依赖的库

        按后面的步骤中的提示安装。

配置内核

$ make menuconfig # 进入后直接选exit。

编译内核

$ make
$ make modules

安装内核

        此步类似于安装操作系统文件。
$ sudo make modules_install
$ sudo make install
$ cd /boot
$ sudo mkinitramfs -o initrd.img-2.6.32 2.6.32

配置开机启动菜单

$ sudo vi /etc/default/grub # 行“GRUB_HIDDEN_TIMEOUT=0”,由0改为30
$ sudo vi /etc/grub.d/30_os-prober # 行“timeout = 0”,由0改为30
# update-grub

启动内核

$ sudo reboot # 重启后,选择对应版本的内核即可

hello模块

创建目录

$ mkdir hello # 任意目录下创建此文件夹

源码

#include <linux/init.h>  /* Needed for the macros */
#include <linux/module.h> /* Needed for all modules */

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("fred_yu");

static int __init hello_init(void)
{
    printk(KERN_ALERT "Hello, world!/n");
    return 0;
}

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

module_init(hello_init);
module_exit(hello_exit);

Makefile

obj-m += hello.o

编译

        没有选择使用下载的内核源码编译hello模块,是因为会导致编译后的ko文件无法加载,必须使用Ubuntu下的Linux内核来编才行。
$ sudo make -C /usr/src/linux-headers-2.6.32-38-generic-pae SUBDIRS=$PWD modules # 注意路径名称和Ubuntu版本信息中的对应。

加载、卸载

$ sudo insmod hello.ko
$ sudo rmmod hello.ko

查看输出打印

$ dmesg # 查看最后两行,即对应源码中的两行打印。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值