LDD3-HELLO world.ko

Linux设备驱动 ----helloworld.ko 毕业已经好多年了,从单片机到毕业后的安卓开发,虽然在上面工作了很多时间,但是总感觉自己缺点什么。总的来说对知识的储备其实不是那么充足,对一些深层次的东西理解也不是很透彻,当然自己也缺少一股冲劲与恒心。所以现在想在优快云 上中记录对基础知识的一些巩固,对程序员而言真的是需要多看多写,才能对自己有所提高,不然到最后可能还是那个水平,废话可能有点多了........下面进入正题 最简单的驱动编译,注... 阅读详情

所有代码都在 2.6.29-gentoo-r5 中调试并通过.
传说中学习必备的 helloworld 例子.

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
        printk(KERN_ALERT "Hello, KKernel !\n");
        return 0;
}

static void hello_exit(void)
{
        printk(KERN_ALERT "Goodbye, KKernel!\n" );
}

module_init(hello_init);
module_exit(hello_exit);

1、Makefile书写:

KERNELDIR = /usr/src/`uname -r` #当前内核的源码树

PWD = $(shell pwd)

#1 obj-m := hello.o 模块只有一个文件

#2 hello-objs := one.o two.o three.o 模块有多个文件

#3 如果模块是由一个目录(online)组成的写法如下

a、在这个目录的上一级目录中的makefile中加入

obj-m += online/ #告诉在编译的时候找到online目录

obj-$(CONFIG_USB_GADGET_ONLINE) += online/ 这种方式是用配置选项(kconfig文件中添加配置选项)来判断是否编译这个子目录(即模块)

b、最后,我们在online/下创建新文件Makefile,并且添加下面一行到其内。

obj-m += netmeeting.o

netmeeting-objs := one.o two.o three.o 如果有多个文件

all:

[TAB] $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:

[TAB] rm -rf *.o *.ko *.mod.c *.o.cmd .tmp_versions *.mod.o .cmd

2、编译运行 超级用户

make

insmod

rmmod

lsmod

3、调试查看输出信息

a、在模块中添加调试输出语句 printk

cat /proc/kmsg (rsyslog没有运行)

dmesg (syslogd进程已经运行 /etc/rc.d/init/rsyslog 开启)

cat /var/log/message

注意:

printk(KERN_ALERT”xxxx”);

宏的定义等级如下(printk.c):
#define KERN_EMERG “<0>” /* system is unusable */
#define KERN_ALERT “<1>” /* action must be taken immediately */
#define KERN_CRIT “<2>” /* critical conditions */
#define KERN_ERR “<3>” /* error conditions */
#define KERN_WARNING “<4>” /* warning conditions */
#define KERN_NOTICE “<5>” /* normal but significant condition */
#define KERN_INFO “<6>” /* informational */
#define KERN_DEBUG “<7>” /* debug-level messages */

当指定的等级小于console_level(默认4)时候,就可以直接在tty上面打印输出语句

console_level设置方式:

通过对/proc/sys/kernel/printk的访问来改变console_loglevel的值:

jimi@gentoo ~/myldd3/hello $ #echo 1 > /proc/sys/kernel/printk

jimi@gentoo ~/myldd3/hello $#cat /proc/sys/kernel/printk
1 4 1 7

jimi@gentoo ~/myldd3/hello $ ]#insmod hello.ko
jimi@gentoo ~/myldd3/hello $ #rmmod hello
jimi@gentoo ~/myldd3/hello $ #echo 7 > /proc/sys/kernel/printk
[jimi@gentoo ~/myldd3/hello $#cat /proc/sys/kernel/printk
7 4 1 7

[Tekkaman2440@SBC2440V4]#insmod hello.ko
Hello, KKernel !
[Tekkaman2440@SBC2440V4]#rmmod hello
Goodbye, KKernel!

四个数字的含义:当前的loglevel、默认loglevel、最小允许的loglevel、引导时的默认loglevel。

This entry was posted on Wednesday, October 28th, 2009 at 03:00 and is filed under  Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed. You can  leave a response, or  trackback from your own site.
HBF凭什么能挑战HBM? 最近AI圈聊得最多的,除了大模型迭代,就是“算力瓶颈”。大家都知道GPU不够用、HBM抢疯了,但很少有人注意到,存储层正在酝酿一场革命——高带宽闪存(HBF)。今天就结合HBM之父Joungho Kim教授的最新观点,跟大家好好盘盘这门技术:它不是HBM的替代品,却可能重塑AI推理的游戏规则,甚至在2038年超越HBM市场规模。先澄清一个核心认知:HBF不是凭空冒出来的新技术,而是站在HBM肩膀上的“优化款”。 阅读详情

相关推荐

华为防火墙 策略路由实现多ISP接入Internet

PC3上网访问Server1时走ISP1。PC4上网访问Server1时走ISP2。1、配置接口IP并加入相应的安全区域。二、ISP2 运营商 R2路由器。一、ISP1 运营商 R1路由器。

一直被模仿,从未被超越 3014

LDD3学习笔记——模块的编译

新手上路,LDD3学习之旅开始,以下内容纯属笔记,有很多错误,望见谅!一.运行于PC(Unbuntu)上的模块编译1.什么是“模块”? 可以在系统运行时加入到内核中的代码。故:模块包括但不限于设备驱动程序。2.如何写一个模块?1). .c文件 2).实现module_init, module_exit 3.LDD3中makefile编写规则(照搬):ifneq($(KERNELRELE

老夫可是单手抓榴莲的男人的博客 394

2023年全国职业院校技能大赛高职组“区块链技术应用”赛项赛卷(3卷)解析

我们先绘制题组中所有设计图我这边作图用的国内的在线作图工具。

2301_76737000的博客 5419

Helloworld模块编译.ko

首先引用网上最常见的Helloworld模块:

未名湖畔的落叶 1794

CosyVoice 本地部署详细教程 手把手小白教程

本文提供了详细的CosyVoice本地部署教程,强调了避免中文名称和空格的重要性,并列出了必要的软件安装步骤,包括CUDA、cuDNN、Git和Miniconda。教程涵盖了从检查CUDA版本到下载模型和运行模型的全过程,确保用户能够顺利部署并使用CosyVoice。

huazn612的博客 2万+

头歌工程实训答案-机器学习篇之手写体识别篇

第2关:激活函数'''x:负无穷到正无穷的实数'''if x<=0:return 0else:return x#***第3关:反向传播算法import os。

m0_71537260的博客 2518

带参数的内核模块

hello.c #include #include char *p="Twenty-four"; MODULE_LICENSE("GPL"); module_param(p, charp, S_IRWXU); static int hello_init(void) { printk(" p is %s\n",p); printk

EtherCAT 705

MSTAR数据集下载地址及处理方法

首先感谢博主冯子材提供下载的百度网盘地址。 在这里为了防止侵权,特此鸣谢,并给出其博客地址。 地址中有MSTAR百度网盘下载地址和需要使用的数据介绍,其中百度网盘中有数据转换工具 https://blog.csdn.net/taifengzikai/article/details/80600355 工具使用 因为下载得到的数据是二进制文件,需要使用官方提供的工具进行转换,可将其转换为jpeg。 有...

KamenRider 1万+

Linux Kernel的第一个程序helloworld!!!

编写和测试环境:OS:Suse 11 SP3内核:Linux linux-jcvv 3.0.76-0.11-default #1 SMP Fri Jun 14 08:21:43 UTC 2013 (ccab990) x86_64 x86_64 x86_64 GNU/Linux1.用vi编写一个hello.c#ifndef __KERNEL__        #define __KERNEL__#e...

Technology is changing our lives. 1041

2023年12月青少年C/C++软件编程(三级)等级考试试卷及答案解析

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。第一行一个数字n,n不超过100,表示有n*n的宿舍房间。接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。输出为一行,表达式的值。任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。

长春高老师编程 1511

44位abogus补环境与纯算逆向分析

44位ab参数补环境与纯算加密流程逆向分析

吴秋霖的博客 2774

【LDD】hello world

Linux驱动模块初始教程:一步一步,从helloworld到insmod->printk!!! 【0】笔者的配置环境 XP->VMWare 7.1->Ubuntu 9.04 【1】有必要查询下Linux内核 # uname -r 2.6.28-11-generic # ls /usr/src/ linux-headers-2.6.28-11 linux-headers-

小青年儿 1298

CKS-CN考试之路----11

显然是alpine-b的镜像有libcrypto3-3.1.4-r5。新版本发布老版本会被回收,此时pod只剩下2个container。我们依次测试是哪个镜像里包含libcrypto3。可以看到alpine的pod有3个副本.

Q先生 652

LDD3_No1.:Hello,World的问题

 都说是经典,忍不住, 前几天看了LDD3。老习惯,开篇总是HELLO,WORLD。按照作者的提示:使用标准内核,到kernel.org上下载了最新的稳定版本,make oldconfig,不成功,make menuconfig,不成功。晕!想想算了,我的vmware中安装的ubuntn即是2.6内核,不编译也应该可的。(编译内核忒麻烦,在我的所有经历中,不成功是正常的,个人感觉有时候

点滴的坚持 684

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LDD3: Hello World

昨天游戏机弄好了,内核也

Huntinux 1255

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LDD3 hello world 模块

对于linux驱动程序的学习,一直都没有停下过,工作上,总是硬件、驱动、系统、应用一块儿整,感觉自己虽然学的很多,但没有一点是可以说做得非常漂亮的。      现在开始,把LDD3重新理一遍 内核版本:企业版5 :linux 2.6.18       hello world 模块源程序 : #include #include //所有的模块代码都应包含的头文件 #includ

538

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LDD学习课程之一

先前一直在外地有事情,耽搁了一些时间。希望能够赶上。一个简单的LDD  HELLO#include #include static __init int Hello_init() { printk(KERN_EMERG"HELLO,LINUX WORLD"); return 0 ; } static __exit int Hello_out() { printk(KERN_EMERG"GOODBYE~~"); return 0 ; } module_init(Hel

HaoRanZhong的专栏 756

LDD3学习笔记(一) --hello world模块

<br /> <br />Hello world 源程序<br />#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world!/n"); return 0; } static void hello_exit(void) { printk

yel617的专栏 1328

ldd3 读书笔记 —— Hello, world!

ldd3 读书笔记 —— Hello, world!

bluejays的专栏 566

Linux设备驱动开发(LDD)学习笔记(一)

个人学习笔记

zed_killer的博客 885

ldd_hello_world

笔记 linux2.6之后将模块的后缀改为.ko,与.o相区分。同时在.ko中增加了.modinfo段,可以使用modinfo命令查看; modinfo hello_world.ko 关于makefile,建议先阅读文档:linux/Documentation/kbuild/makefiles.txt makefile: #目标obj-m,将目标编译为模块 obj-m := hello_worl...

weixin_30611509的博客 143

LDD3linux设备驱动源码树的安装和第一个hello wolrd驱动的编写

刚开始LDD3这本书,按照书上的hello world编写了第一个hello.c的代码。同时也写了完整的makefile文件,但是在执行sudo make的时候提示各种问题。 一/。照ldd3书上说的,需要构建源码树。 1.进入/usr/src ,在这里构建源码树,我们用下面指令查看可用的源码包: $ sudo apt-cache search linux-source 2

weixin_41209164的博客 185

转LDD3构造内核树

作者:蔡伦辉<br /><br /><br /><br />写在前面<br /><br />作者一直支持GPL的精神。允许任何人自由使用、转载、复制和再分发,但必须保留作者署名,必须保证全文完整转载,包括完整的版权声明。<br />由于作者水平有限,因此不能保证文章内容准确无误,请批判阅读。如果你发现任何错误或对文章内容有任何建议,欢迎你与我联系:<br />Email: caiallen@tom.com  QQ群: 14765968<br /><br /><br /><br /><br />设置测试系统<

野猪奔月 1515

Notes [ Linux Device Drivers, 3rd Edition ( Ch02 ) - The Hello World Module ]

很想接触一下Linux的内核,最近加入了LKML(Linux Kernel Mailing List),犹如潮水般的mail涌入了我的Gmail>_一开始很迷茫,如此庞大了Linux内核代码,从何开始?网上看到了一条建议:从Linux设备驱动的编写开始。于是找到了一本这方面比较好的教材:Linux Device Drivers, 3rd Edition(LDD3)不过这本书里面讲的第一

Fly Away 620

ldd3学习之二:构造和运行模块

1.设置测试系统: ①设置一套内核源码树,比如/usr/src/linux-2.6.x,参考http://www.kernel.org/ eg:uname -r  --->2.6.32-27-generic wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.27.tar.gz ②直接用发行版的内核源码包,比如/lib

科学边界 411

ldd3_内核模块编程之_初窥门径

from http://www.cublog.cn/u/13991/showart_109260.html 学习内核模块编程是一 件很有意义的事——要想开发Linux驱动程序, 必须深入理解内核模块编程: 驱动程序就是以模块的形式加载到内核中的嘛! 本文介绍了内核模块编程的"hello, world!". 解释了一些概念, 提出了一些值得注意的问题. 由于初涉模块编程, 难免有所纰漏, 欢迎朋友

探秘 811
上一篇: VMware tools的用途及安装
下一篇: scull 在2.6.32-5内核中的编译解决方案
ricks_wu
博客等级 码龄18年 59粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值