- 浏览: 1478672 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
helloworld.c
Makefile
make
tailf /var/log/messages
查看日志
obj-m 意思是将后面跟的东西编译成内核模块。相对应还有:
obj-y 编译进内核
obj-n 不编译
hello.o 为模块名称
hello.o-objs 为模块依赖的文件名
KID 指定了内核源码的路径
PWD
为当前路径
-C 选项的作用是指将当前工作目录转移到你所指定的位置。
“M=”
选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,
需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,
将其编译,生成KO文件
#include <linux/kernel.h> #include <linux/module.h> static int __init helloworld_init(void) { printk("<0>""helloworld!\n"); return 0; } static void __exit helloworld_exit(void) { printk("<0>""byebye!\n"); } module_init(helloworld_init); module_exit(helloworld_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("haoning");
Makefile
ifneq ($(KERNELRELEASE),) obj-m := helloworld.o else PWD := $(shell pwd) KVER ?= $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: rm -rf *.cmd *.o *.mod.c *.ko *.mod.o *.ko.unsigned modules.order Module.symvers endif
make
[root@mytest kernel]# make make -C /lib/modules/2.6.32-431.11.2.el6.x86_64/build M=/data/haoning/kernel modules make[1]: Entering directory `/usr/src/kernels/2.6.32-431.11.2.el6.x86_64' CC [M] /data/haoning/kernel/helloworld.o Building modules, stage 2. MODPOST 1 modules CC /data/haoning/kernel/helloworld.mod.o LD [M] /data/haoning/kernel/helloworld.ko.unsigned NO SIGN [M] /data/haoning/kernel/helloworld.ko make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.11.2.el6.x86_64' [root@mytest kernel]#
[root@mytest kernel]# ls helloworld.c helloworld.ko helloworld.ko.unsigned helloworld.mod.c helloworld.mod.o helloworld.o Makefile modules.order Module.symvers [root@mytest kernel]# [root@mytest kernel]# insmod helloworld.ko [root@mytest kernel]# Message from syslogd@mytest at Jun 4 19:30:47 ... kernel:helloworld! [root@mytest kernel]# rmmod helloworld.ko Message from syslogd@mytest at Jun 4 19:31:02 ... kernel:byebye! [root@mytest kernel]#
tailf /var/log/messages
查看日志
obj-m 意思是将后面跟的东西编译成内核模块。相对应还有:
obj-y 编译进内核
obj-n 不编译
hello.o 为模块名称
hello.o-objs 为模块依赖的文件名
KID 指定了内核源码的路径
PWD
为当前路径
-C 选项的作用是指将当前工作目录转移到你所指定的位置。
“M=”
选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,
需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,
将其编译,生成KO文件
发表评论
-
xl2tp 备份
2019-09-24 16:25 7012019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 733sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1433参考https://bellard.org/jslinux/t ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 18922019年12月26日 可以参考原来的配置 https:// ... -
consul的基本使用
2017-06-27 11:13 1403### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 598###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 638《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1959参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 955/etc/hosts ssh-keygen ssh-copy- ... -
mobile terminal 笔记
2016-12-02 15:35 629找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
socket基础和select(python)
2016-06-14 17:21 1803上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 996不使用select 普通的基础socket连接,对多个客户端的 ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4364假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 659864位操作系统centos7 ############ 1.一 ... -
socat和netcat(nc)
2016-04-29 22:36 1748转 原文链接: http://www.wenquan.name ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1624接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1545qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ... -
neutron基础七(qemu tap)
2016-02-02 17:02 1030使用qemu 建立个虚拟机 然后用tap设备, 根据基础六,t ... -
neutron基础六(bridge fdb)
2016-01-28 18:30 2268转发表 在三台机器上建立三个namespace 192.16 ... -
南北流量
2016-01-23 23:26 1829一、三层网络架构: 接入层:负责服务器的接入和隔离 汇聚层:汇 ...
相关推荐
根据提供的文件信息,本文将详细介绍如何在Linux 2.4内核环境下编写、编译、加载及卸载一个名为“helloworld”的内核模块。通过本教程的学习,读者可以掌握基本的内核模块开发流程。 ### 一、环境准备 #### 1.1 ...
Linux内核模块编程是Linux系统开发中的一个重要环节,它允许开发者在不重新编译整个操作系统内核的情况下,添加、修改或删除内核功能。这种方式极大地提高了系统的灵活性和可扩展性。下面将详细介绍Linux内核模块的...
接下来,我们创建一个简单的内核模块,名为“helloworld”。这个模块的主要目标是在系统日志中打印出“Hello, World!”的信息。首先,我们需要创建一个C源文件,比如`helloworld.c`,并在其中写入以下代码: ```c #...
【标题】: "08 内核模块Hello1" 涉及的知识点 【描述】: 描述中提到了深入理解UNIX系统内核、Linux设备驱动程序以及建立和运行Linux内核模块,这些都是与操作系统内核、设备驱动开发和内核模块编程相关的主题。 ...
Linux驱动开发之编写第一个内核模块--Hello World源码, 亲测OK,对应文章链接: https://dingdong.blog.csdn.net/article/details/106329048
关于多文件编译,当一个内核模块包含多个源文件时,我们需要一个Makefile来组织编译过程。一个基本的Makefile模板可能如下: ```makefile obj-m += hello.o KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build ...
一个典型的“Hello World”级别的内核模块示例涉及编写一个最简单的内核模块,它在加载时通过模块的初始化函数打印一条消息,并在卸载时再次打印一条消息。这个过程演示了模块的加载和卸载,是学习内核模块编程的...
这个 C 文件定义了一个简单的内核模块,包含一个 init 函数和一个 exit 函数。init 函数将在模块加载时调用,exit 函数将在模块卸载时调用。 三、编写 Makefile 文件 创建一个名为 Makefile 的文件,内容如下: `...
本教程旨在通过创建一个简单的`HelloWorld`驱动程序来介绍如何将其编入Linux内核并在系统启动时加载,进而实现打印“Hello World”的功能。这不仅有助于理解驱动程序的基本结构,还能够为学习更复杂的内核编程打下...
Windows内核安全与驱动开发书的第一个示例程序,在新版本开发环境中调试通过,使用Visual Studio 2017加上WDK 1803环境编译。在调试过程中,由于x64驱动程序禁止使用嵌入汇编,采用Shellcode方式进行软件中断调用,...
Linux内核模块是Linux操作系统中一个重要的组成部分,它允许用户在不重新编译整个内核的情况下,添加、修改或删除内核功能。这对于系统管理员和开发者来说是非常实用的,因为可以动态地扩展内核功能,而不需要每次...
例如,我们创建一个名为`hello_world.c`的内核模块,代码如下: ```c #include #include #include MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A simple kernel module example")...
内核模块本身是一个未链接的目标文件,它们在被加载到内核后成为内核的一部分,并能访问内核的公共符号。 加载内核模块的过程通常由内核模块管理守护进程kmod控制,它调用modprobe来查找和加载必要的模块。modprobe...
2. **创建源代码文件**:创建一个C语言源代码文件,例如`helloworld.c`。在这个文件中,我们将编写基本的“Hello, World!”输出功能。 ```c #include #include #include MODULE_LICENSE("GPL"); MODULE_AUTHOR...
2. **内核模块链接**:当一个模块需要使用另一个模块提供的功能时,它可以通过查找导出的符号来链接。`modprobe`命令在加载模块时会自动处理符号解析。 3. **限制导出**:为了维护内核的稳定性和安全性,有些导出...
接下来编写一个简单的“Hello World”内核模块。使用文本编辑器(如vi)创建名为`hello.c`的C语言源文件,并将以下代码复制进去: ```c #include #include MODULE_LICENSE("GPL"); MODULE_AUTHOR("DAVID"); ...
"linux 第一个HelloWorld驱动带测试源码.rar" 提供了一个简单的入门级示例,帮助初学者熟悉Linux内核驱动的开发过程。这个压缩包包含了创建、编译和测试一个基本驱动程序的所有必要文件。 首先,"HelloWorld"驱动...
"Linux 2.6内核模块编程范例"是针对这一主题的教程,它包括一个基本的"Hello, World!"程序以及一个标准的Makefile模板,帮助开发者了解如何编写和构建内核模块。 首先,我们来看"Hello, World!"程序,Exhello.c。这...
"Hello World"内核驱动程序是一个简单的起点,它可以帮助初学者熟悉内核模块的构建过程。这里我们将深入探讨如何在Ubuntu 14.04上创建并编译一个"Hello World"内核驱动,以及涉及到的关键文件。 首先,`hello.c`是...