《linux设备驱动程序》前期准备工作

本文档介绍了如何在Ubuntu 5.04上安装和编译Linux 2.6.10内核,以及解决因内核版本差异导致的模块加载问题。同时,详细阐述了编译《Linux设备驱动程序》中scull示例代码的过程,提供了解决模块加载错误的方法。

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

     最近在看《linux设备驱动程序》,由于这本书使用的是2.6.10内核,属于比较老的内核。那么有两种办法,一是在新内核上编译scull,可以参考之前写过的一篇日志(在linux 3.17.6上编译成功);第二种就是直接使用2.6.10内核,可以安装ubuntu 5.04(不一定要这个,最好相差不要太远)。
一、安装ubuntu 5.04
    下载地址: http://old-releases.ubuntu.com/releases/hoary/
    安装过程没什么好说的,需要提到的是,因为这是2005年的发行版,所以虚拟机软件的默认硬件配置不适用它,请自行修改。如CD,硬盘接口类型最好改为IDE。
    安装配置ssh,samba,可以参照网上教程。

二、编译linux 2.6.10内核代码
    下载地址: https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.gz
    下载后随便找个目录解压,最好是自己的主目录。
    tar zxvf linux-2.6.10.tar.gz
    开始编译:
    1.拷贝正在使用的内核配置文件
    cp /boot/config-2.6.10-5-amd64-generic   /home/zhujiang/linux2.6.10/.config
    2.make menuconfig提示没有图形库,可以使用make oldconfig
    3.make -j(注:make成功后不要make install,不然系统重启后进不来)
    4.make modules
    5.make modules_install
    至此,已编译安装完成,可以写个hello world模块测试一下,当你插入测试模块会发现提示
    insmod: error inserting 'test.ko': -1 Invalid module format
    test: disagrees about version of symbol struct_module
    这是内核版本不一致造成的,虽然都是2.6.10,但是内核版本的字符串名称不一样,所以认为是不同版本,可以用下面几步搞定:
    1.sudo cp test.ko /lib/modules/`uname -r`
    2.sudo depmod
    3.sudo modprobe --force-modversion test

三、编译 scull代码
    scull是《linux设备驱动程序》的示例代码,除了makefile里面需要修改一下指向/lib/modules/2.6.10,其他均不需要修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值