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

来源:互联网 发布:赵薇杀人知乎 编辑:程序博客网 时间:2024/05/16 08:21
     最近在看《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,其他均不需要修改。
1 0