LDD(linux设备驱动)环境搭建

LDD(linux设备驱动程序)环境搭建

2020/12/24 10:08

  1. vbox下安装ubuntu5.04 (i386) iso下载地址

  2. 安装gcc sudo apt-get install gcc (应该是本地源吧 gcc version 3.3.5)

  3. 将下载的linux2.6.10源码 tar -xzvf xx解压到/usr/src目录,然后进入此目录

    1
    2
    3
    4
    make oldconfig
    make bzImage
    make modules
    make modules_install
  4. 制作initrd.img文件

    mkinitrd -o /boot/initrd.img-2.6.10 2.6.10

    2.6.10表示的是/lib/modules下的目录

  5. sudo update-grub

  6. 重启F12选2.6.10


  • 随便选一个目录放测试模块代码,

    hello.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <linux/init.h>
    #include <linux/module.h>
    MODULE_LICENSE("GPL");

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

    static void hello_exit(void)
    {
    printk(KERN_ALERT"exit\n");
    }

    module_init(hello_init);
    module_exit(hello_exit);
  • Makefile

    1
    2
    3
    4
    5
    6
    7
    8
    obj-m := hello.o
    KDIR := /lib/modules/2.6.10/build

    all:
    make -C $(KDIR) M=$(PWD) modules

    clean:
    rm -f *.ko *.o *.mod.o *.mod.c *.symvers

    obj-m编译可装载的模块,obj-y是编译进内核

    KDIR指定内核目录树的路径,-C是make的更换目录选项

    M

    1

    使用M=dir指定要构建的外部模块的目录(就是hello.c的目录)

    make modules表示编译模块


  1. 在hello.c目录下执行make

  2. sudo提权

  3. insmod hello.ko加载模块

  4. rmmod hello卸载模块

  5. dmesg查看日志消息(如果控制台没有)

    2


参考1

参考2


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!