Linux内核源码树建立加载hello模块
在加载模块之前,书中说要先建立内核源码树,那么,如何建立内核源码树呢?
首先,要先知道你的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模块相关推荐
- Linux内核启动及文件系统加载过程
当u-boot开始执行bootcmd命令,就进入linux内核启动阶段 与 u-boot 类似,普通 Linux 内核的启动过程也可以分为两个阶段,但针对压缩了的内核如 uImage 就要包括内核自解 ...
- Linux内核源码树学习:Kconfig和Makefile
Linux内核源码树的每个目录下都有两个文档Kconfig和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单 ...
- linux内核源码树
linux内核源码树扫盲分析 sudo apt-get install tree //下载tree tree //输入指令(该指令可以检查第三方工具包里的内容是否完整) 可以看到如图的树状结构: li ...
- 构建linux内核源码树
编写驱动程序时,需要内核源码树的支持.内核源码树时从内核源代码编译得到的.下面开始构造内核源代码的步骤.以Ubuntu为例子 1. 下载内源代码,位置www.kernel.org. (注意:源码树内核 ...
- linux内核采取,采用动态加载模块的方式Linux内核编译
Linux内核是一种单体内核,但是通过动态加载模块的方式,使它的开发非常灵活方便.那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手.以下是一个简单的hello内核模块的Makefi ...
- linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)
首先下载树莓派linux内核源码: 下载网址:https://github.com/raspberrypi/linux 在树莓派使用指令:uname -r查看当前树莓派的版本号,然后选择对应的linu ...
- ARM树莓派高级开发——linux内核源码、树莓派源码编译、SD卡挂载
文章目录 linux内核开发基础(linux内核源码.树莓派源码编译.SD卡挂载) 树莓派等芯片带操作系统的启动过程 linux内核源码树 Linux内核源代码目录树结构: 树莓派Linux源码配置 ...
- 需要多久才能看完linux内核源码?
代码中自由颜如玉! 代码中自有黄金屋! 那么Linux内核代码到底有多少行? 我们需要多久能读完呢? 一.内核行数 Linux内核分为CPU调度.内存管理.网络和存储四大子系统,针对硬件的驱动成百上千 ...
- 听说你要把Linux内核源码读完?
正所谓 代码中自有颜如玉! 代码中自有黄金屋! 那么Linux内核代码到底有多少行? 我们又需要多久能读完呢? 一.内核行数 Linux内核分为CPU调度.内存管理.网络和存储四大子系统,针对硬件的驱 ...
最新文章
- python3 nmap 函数简介
- 消费者行为模型_市场调查消费者行为研究模型
- 让 Python 更加充分的使用 Sqlite3
- java将图片铺满panel_如何让添加的背景图片铺满整个JFrame?
- C++中的lambda表达式和线程库
- .net Core 安装在linux上
- python文件同时读写_python 同时读取多个文件的例子
- 编程趣谈_k++_++k_k一行顺序输出,结果会有差异吗?
- 【STC8A8K64S4A12开发板】—小白做GPIO点灯实验
- linux下安装qt教程
- 40年开店近4万家,麦当劳老大地位恐不保!看看人家这心机!
- 2022年全球市场三维测量产品总体规模、主要生产商、主要地区、产品和应用细分研究报告
- ubuntu中打开出现闪退_如何解决ubuntu软件中心闪退
- 2019/4/2更新 重制3617-6.17 增加918+6.21 二合一引导启动系统盘
- Python基于Oxford-IIIT Pet Dataset实现宠物识别系统
- ATK-HC05蓝牙模块的详细说明
- 下载并运行 Synopsys Detect
- [附源码]Python计算机毕业设计Django飞越青少儿兴趣培训机构管理系统
- Clamav安装及基本使用教程
- js 图片上传传给后台的几种格式,formData,base64,file,blob流
热门文章
- win10添加美式键盘_win10玩dnf卡顿,怎么解决?
- html 数据项放在 标签,如何在HTML中传递数据选择选项标签?
- Regex Tester (免费有用)
- java中Pattern和Matcher的使用
- LeetCode-53. 最大子序和-最简单的动态规划(Python3)
- 信息系统项目管理师:第5章:项目范围管理(2)-重点汇总
- 《系统集成项目管理工程师》必背100个知识点-93国家信息化体系六要素
- Python 中的 import 与 from import 区别
- Windows下使用Java API操作HDFS的常用方法
- Geotools简介以及quickstsrt加载shp文件并显示