• Ubuntu 16.04下Linux驱动编写第一步


    源码环境的搭建

      • Install源码

          >sudo apt-cache search linux-source

    linux-source - Linux kernel source with Ubuntu patches

    linux-source-4.4.0 - Linux kernel source for version 4.4.0 with Ubuntu patches

      因差异这个略有不同,选择linux-source-4.4.0即可。按照你显示的版本号而定。

    >sudo apt-get install linux-source-4.4.0

      安装完成后,在/usr/src/ 目录下会出现两个新文件,一个为linux-source-4.4.0文件夹,另外一个为 linux-source-4.4.0.tar.bz2。 

    >tar jxvf linux-source-4.4.0.tar.bz2 -C /home/yourdir/Kernel

      解压到你的文件夹下 或者解压到当前目录下也行。

    在解压出来的的linux-source-4.4.0目录下执行配置内核的工作

    >sudo make oldconfig //配置内核

    >sudo make              //编译内核 此处时间花费较长 若出现类似openssl/opensslv.h No such file or directory 这样的 错误则表明需要安装 libssl-dev 执行sudo apt-get install libssl-dev        //此处将占用13GB的空间。使用虚拟机的最好把硬盘整大点!

    >sudo make modules   //编译模块

      >sudo make modules_install //安装模块

    第一个.c文件与Makefile文件

    •   在自己工作目录下新建一个文件夹并在此下建立hello.c与Makefile文件
    • Makefile文件可以直接用vim Makefile建立,注意M为大写。

    hello.c代码

     1 #include <linux/init.h>
     2 #include <linux/module.h>
     3 MODULE_LICENSE("Dual BSD/GPL");
     4 static int hello_init(void)
     5 {
     6     printk(KERN_ALERT "Hello, world
    ");
     7     return 0;
     8 }
     9 static void hello_exit(void)
    10 {
    11     printk(KERN_ALERT "Goodbye, cruel world
    ");
    12 }
    13 
    14 module_init(hello_init);
    15 module_exit(hello_exit);

    Makefile文件。//注意空格与Tab

    obj-m :=hello.o
    hellomodule-objs :=module #可以把hello这个改成你的命名
    KERNELDIR := /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)
    default:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    

    保存后执行 >sudo make

    即可生成hello.ko文件。既可以利用此文件来装载到内核中去了。

    装载命令 >sudo insmod ./hello.ko

    装载完成后可以使用 > lsmod //查看当前安装的驱动模块。

    > cat /var/log/syslog 中可以直接看到输出的 hello 与Goodbye // 或者使用 >dmesg | tail 此条命令更简洁

    卸载命令 > sudo rmmod ./hello.ko

    第一次配置环境及编写Makefile的过程中遇到了很多坑,关于驱动的进一步学习还需要参考相关的Linxu驱动开发的相关书籍及教程。

    关于文中的hello.c以及Makefile文件中的各种内容为什么这样子写,相信你查看相关的资料之后即可了然于胸了。

    Go as far as your heart will take you.
  • 相关阅读:
    单例和静态类
    Aggregate
    lc.exe已退出代码为1
    MVC 使用entity framework 访问数据库 发布IIS
    MVC 发布
    Nhiberate (三)测试
    Nhiberate (二) 搭项目
    初次安装git配置
    十大Intellij IDEA快捷键(转)
    Git强制覆盖master分支
  • 原文地址:https://www.cnblogs.com/fogcell/p/6126316.html
Copyright © 2020-2023  润新知