• linux设备驱动程序第3版学习笔记(例程1)


    参考网页:www.linuxidc.com/Linux/2012-12/75891.htm

    参考书22页

    1、查看系统内核版本

    2、如果系统自动安装了源码。在/usr/src目录下会有对应的使用版本:(需要下载)

    3、用非root用户查看下载源码包

    4、下载4.8.0的源码包

    sudo apt-get install linux-source-4.8.0

    5、下载完成会在/usr/src下,有linux-source-4.8.0.tar.bz2

    6、解压sudo tar jxvf linux-source-4.8.0.tar.bz2

    7、出现文件夹linux-source-4.8.0

    8、配置内核(?)三种配置方式(1:make oldconfig 2:make menuconfig 3:make xconfig)(?)

      sudo make oldconfig

    9、编译内核(一个多小时)

      sudo make

    10、编译后的景象

    11、编译模块

      sudo make modules

    12、安装模块

      sudo make modules_install

    13、执行结束,生成新的目录/lib/modules(原系统的/lib 下载的linux_source中没有lib这个文件夹)

    14、上面的4个文件夹中都有build这个目录,用的时候就懵1个4.8.17吧(不明原理)

    15、在/home/yangty/下写好hello.c程序

      (1)linux文件夹在哪里?

      (2)MODULE_LICENSE(“yangty BSD/GPL”);//一个特殊宏,用来告诉内核,该模块采用自由许可证;如果没有这样的声明,内核在装载该模块时会产生抱怨。

     16、Makefile代码(照着书和网页)

    obj-m := hello.o  //生成hello.o的目标文件

     KERNELDIR := /lib/modules/4.8.17/build //内核路径?如下两个文件夹中的内容好像一致

    PWD := $(shell pwd) 这应该是生成目标文件的路径 就是Makefile的路径

    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

    应该和书里的如下语句相同

    make -C ~/kernel-2.6 M=`pwd` modules

    为了让上面的Makefile文件能正常工作,必须在大的内核构造系统环境中调用它们。

    -C选项指定内核源码目录的位置,其中保存有内核的顶层Makefile文件。M=选项让Makefile在构造modules目标之前返回到模块源代码目录。

    17、make

    18、加载模块

    sudo insmod ./hello.ko

    19、查看加载模块

    sudo lsmod

    或者

    sudo lsmod |grep hello

    20、删除模块

    sudo rmmod hello

    21、查看

    sudo cat /var/log/syslog |grep world

    日志文件清除

    待解决:

    printk信息没有打印在控制台,而是在日志中

  • 相关阅读:
    Spring3+hibernate4+struts2整合的 过程中发生如下错误
    使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错
    org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver class not found
    Java多线程编程:
    数据库连接池的工作原理
    Oracle数据库表的备份和数据表的删除操作
    数据库连接池
    Mysql登录异常的一个问题:
    2019年终总结
    设计模式入门-简单工厂模式
  • 原文地址:https://www.cnblogs.com/yangtuzi/p/7545912.html
Copyright © 2020-2023  润新知