在加载模块之前,书中说要先建立内核源码树,那么,如何建立内核源码树呢?

  首先,要先知道你的OS的内核版本,用uname -r可以查得到

  

  在/url/src/目录下可以看到对应的版本目录

  

  如果没有可以用apt-cache search linux-source获取内核

  

  用sudo apt-get install linux-source-3.13.0下载内核

  下载完成后在该文件夹中产生一个对应的压缩文件 linux-source-3.13.0.tar.bz2

  然后解压该文件tar jxvf linux-source-3.13.0.tar.bz2

  进入解压后的目录

  然后进入root权限su (这里进入失败提示 Authentication failure),在终端中输入如下命令: 
  sudo passwd 
  Password:你当前的密码 
  Enter new UNIX password:这个是root的密码 
  Retype new UNIX password:重复root的密码 
  然后会提示成功的信息。

  输入指令make oldconfig开始配置内核。

  之前上网查资料看到配置内核要用一个小时左右,但我输入指令后输出

  

  资料说配置完成后会在/lib/modules下生成新的目录/lib/modules/3.16.0-30-generic/

  在该目录ls一下发现已经存在了这个目录= =!也就是原来系统已经存在内核源码树了。

  

  既然内核源码树已经存在,下面我们要做的就是将hello模块加载到内核中。

  下面是hello的源代码

  

 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\n");
 7     return 0;
 8 }
 9 static void hello_exit(void)
10 {
11     printk(KERN_ALERT"Goodbye, cruel world\n");
12 }
13 module_init(hello_init);
14 module_exit(hello_exit); 

  给代码编写Makefile文件

1 obj-m := hello.o
2 KERNELDIR := /lib/modules/3.16.0-30/build
3 PWD := $(shell pwd)
4 modules:
5     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
6 modules_install:
7     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install 

  运行make

  

  生成相应的hello.ko文件

  

  然后加载hello.ko模块,注意要在root模式下加载,然后lsmod查看加载的模块(书中说会在控制台输出hello world ,但是我的控制台没有输出)

  

  卸载模块

  

  虽然控制台没有进行输出,但是可以在/var/log/syslog下查看hello模块的输出

  

转载于:https://www.cnblogs.com/mage-sun/p/4763819.html

Linux内核源码树建立加载hello模块相关推荐

  1. Linux内核启动及文件系统加载过程

    当u-boot开始执行bootcmd命令,就进入linux内核启动阶段 与 u-boot 类似,普通 Linux 内核的启动过程也可以分为两个阶段,但针对压缩了的内核如 uImage 就要包括内核自解 ...

  2. Linux内核源码树学习:Kconfig和Makefile

    Linux内核源码树的每个目录下都有两个文档Kconfig和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单 ...

  3. linux内核源码树

    linux内核源码树扫盲分析 sudo apt-get install tree //下载tree tree //输入指令(该指令可以检查第三方工具包里的内容是否完整) 可以看到如图的树状结构: li ...

  4. 构建linux内核源码树

    编写驱动程序时,需要内核源码树的支持.内核源码树时从内核源代码编译得到的.下面开始构造内核源代码的步骤.以Ubuntu为例子 1. 下载内源代码,位置www.kernel.org. (注意:源码树内核 ...

  5. linux内核采取,采用动态加载模块的方式Linux内核编译

    Linux内核是一种单体内核,但是通过动态加载模块的方式,使它的开发非常灵活方便.那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手.以下是一个简单的hello内核模块的Makefi ...

  6. linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

    首先下载树莓派linux内核源码: 下载网址:https://github.com/raspberrypi/linux 在树莓派使用指令:uname -r查看当前树莓派的版本号,然后选择对应的linu ...

  7. ARM树莓派高级开发——linux内核源码、树莓派源码编译、SD卡挂载

    文章目录 linux内核开发基础(linux内核源码.树莓派源码编译.SD卡挂载) 树莓派等芯片带操作系统的启动过程 linux内核源码树 Linux内核源代码目录树结构: 树莓派Linux源码配置 ...

  8. 需要多久才能看完linux内核源码?

    代码中自由颜如玉! 代码中自有黄金屋! 那么Linux内核代码到底有多少行? 我们需要多久能读完呢? 一.内核行数 Linux内核分为CPU调度.内存管理.网络和存储四大子系统,针对硬件的驱动成百上千 ...

  9. 听说你要把Linux内核源码读完?

    正所谓 代码中自有颜如玉! 代码中自有黄金屋! 那么Linux内核代码到底有多少行? 我们又需要多久能读完呢? 一.内核行数 Linux内核分为CPU调度.内存管理.网络和存储四大子系统,针对硬件的驱 ...

最新文章

  1. python3 nmap 函数简介
  2. 消费者行为模型_市场调查消费者行为研究模型
  3. 让 Python 更加充分的使用 Sqlite3
  4. java将图片铺满panel_如何让添加的背景图片铺满整个JFrame?
  5. C++中的lambda表达式和线程库
  6. .net Core 安装在linux上
  7. python文件同时读写_python 同时读取多个文件的例子
  8. 编程趣谈_k++_++k_k一行顺序输出,结果会有差异吗?
  9. 【STC8A8K64S4A12开发板】—小白做GPIO点灯实验
  10. linux下安装qt教程
  11. 40年开店近4万家,麦当劳老大地位恐不保!看看人家这心机!
  12. 2022年全球市场三维测量产品总体规模、主要生产商、主要地区、产品和应用细分研究报告
  13. ubuntu中打开出现闪退_如何解决ubuntu软件中心闪退
  14. 2019/4/2更新 重制3617-6.17 增加918+6.21 二合一引导启动系统盘
  15. Python基于Oxford-IIIT Pet Dataset实现宠物识别系统
  16. ATK-HC05蓝牙模块的详细说明
  17. 下载并运行 Synopsys Detect
  18. [附源码]Python计算机毕业设计Django飞越青少儿兴趣培训机构管理系统
  19. Clamav安装及基本使用教程
  20. js 图片上传传给后台的几种格式,formData,base64,file,blob流

热门文章

  1. win10添加美式键盘_win10玩dnf卡顿,怎么解决?
  2. html 数据项放在 标签,如何在HTML中传递数据选择选项标签?
  3. Regex Tester (免费有用)
  4. java中Pattern和Matcher的使用
  5. LeetCode-53. 最大子序和-最简单的动态规划(Python3)
  6. 信息系统项目管理师:第5章:项目范围管理(2)-重点汇总
  7. 《系统集成项目管理工程师》必背100个知识点-93国家信息化体系六要素
  8. Python 中的 import 与 from import 区别
  9. Windows下使用Java API操作HDFS的常用方法
  10. Geotools简介以及quickstsrt加载shp文件并显示