linux驱动开发第一步hello

摘要:
5、查看模块打印信息dmesgprintk是内核打印函数,默认模式下在中断下无法显示,用dmesg可以查看一下打印到内核的信息。

先查看Ubuntu的版本

cat /etc/issue

lin@lin-virtual-machine:~$cat /etc/issue
Ubuntu 12.04 LTS 
 l

或者使用

lin@lin-virtual-machine:~$ sudo lsb_release -a
[sudo] password forlin: 
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 12.04 LTS
Release:    12.04
Codename:    precise

在看一下内核版本

lin@lin-virtual-machine:~$ uname -r
3.2.0-23-generic

现在开始我们第一个代码

hello.c

linux驱动开发第一步hello第1张linux驱动开发第一步hello第2张
/** a simple kernel module: hello
 *
 * Copyright (C) 2014 Barry Song  (baohua@kernel.org)
 *
 * Licensed under GPLv2 or later.
 */
#include <linux/init.h>#include <linux/module.h>

static int __init hello_init(void)
{
    printk(KERN_INFO "Hello World enter
");
    return 0;
}
module_init(hello_init);

static void __exit hello_exit(void)
{
    printk(KERN_INFO "Hello World exit
 ");
}
module_exit(hello_exit);

MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");
View Code

makfile

linux驱动开发第一步hello第3张linux驱动开发第一步hello第4张
KVERS = $(shell uname -r)

# Kernel modules
obj-m +=hello.o

# Specify flags forthe module compilation.
#EXTRA_CFLAGS=-g -O0

build: kernel_modules

kernel_modules:
    make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules

clean:
    make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean
View Code

先cd到文件所在路径,后make

lin@lin-virtual-machine:~$ cd hello
lin@lin-virtual-machine:~/hello$ ls
hello.c  Makefile
lin@lin-virtual-machine:~/hello$ make
make -C /lib/modules/3.2.0-23-generic/build M=/home/lin/hello modules
make[1]: 正在进入目录 `/usr/src/linux-headers-3.2.0-23-generic'
  CC [M]  /home/lin/hello/hello.o
  Building modules, stage 2.
  MODPOST 1modules
  CC      /home/lin/hello/hello.mod.o
  LD [M]  /home/lin/hello/hello.ko
make[1]:正在离开目录 `/usr/src/linux-headers-3.2.0-23-generic'
lin@lin-virtual-machine:~/hello$ ls
hello.c   hello.mod.c  hello.o   modules.order
hello.ko  hello.mod.o  Makefile  Module.symvers
lin@lin-virtual-machine:~/hello$ 

加载模块使用 sudo insmod ./hello.ko

查询当前加载模块lsmod

in@lin-virtual-machine:~/hello$ sudo insmod ./hello.ko
[sudo] password forlin: 
lin@lin-virtual-machine:~/hello$ lsmod
Module                  Size  Used by
hello                  12425  0...

我们之前代码中printk的内容怎么查看呢

使用dmesg指令后

....
[ 1751.580930] Hello World enter
[ 2107.145420] Hello World exit
[ 2107.145422]  
....

小结:

下面我们来看几个驱动中常用的命令

1、加载驱动模块insmod

将生成驱动模块.ko文件加载,

insmod xxx.ko

加载后就会执行xxxx_init函数

2、卸载驱动模块rmmod

对应的卸载驱动的命令

rmmod xxxx 注意不用带.ko

3、查看内核中的模块信息

lsmod

4、查看模块的描述信息

modinfo xxxx.ko

我们可以在驱动程序添加一些辅助信息,例如作者 ,驱动描述等。

5、查看模块打印信息

dmesg

printk是内核打印函数,默认模式下在中断下无法显示(当然,可以设置成打印到终端),用dmesg可以查看一下打印到内核的信息。

cat /var/log/syslog | grep Hello

lin@lin-virtual-machine:~/hello$ cat /var/log/syslog |grep Hello
Jul 24 17:19:05 lin-virtual-machine kernel: [  844.246862] Hello World enter

免责声明:文章转载自《linux驱动开发第一步hello》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇es启动失败jqmobi插件制作(翻译)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WSL2 配置及ubuntu18.04安装mysql8.0+

wsl2 完整配置 参考将WSL2作为生产力工具 Installing, this may take a few minutes… WslRegisterDistribution failed with error: 0x800701bc Error: 0x800701bc WSL 2 ??? https://aka.ms/wsl2kernel Pres...

linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁

Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量、信号量和读写锁。 下面是思维导图:  一、互斥锁(mutex)   锁机制是同一时刻只允许一个线程执行一个关键部分的代码。 1 . 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t...

linux 简介

 linux 介绍(1)Linux根据市场需求不同,基本分为两个方向: 1)图形化界面版:注重用户体验,类似window操作系统,但目前成熟度不够 2)服务器版:没有好看的界面,是以在控制台窗口中输入命令操作系统的,类似于DOS,是我们假设服务器的最佳选择 (2)Linux根据原生程度,又分为两种: 1)内核版本:在Linus领导下的内核小组开发维护的系统...

Redis服务启动失败,提示:redis-server:command not found

今天我开始做主从复制的集群模式的测试,所以需要再装一个Linux操作系统,我在虚拟机里已经安装了一个Linux操作系统,Redis也已经配置好了。今天打算再安装一个Linux操作系统,Linux系统的安装过程很简单,就不多说了,如果大家想看,请查看我的另一篇文章《Redis进阶实践之一VMWare Pro虚拟机安装和Linux系统的安装》。 Linux操作...

Kurento KMS 流媒体服务器 webRTC转rtmp http flv

webRTC ==(通过nodejs指定的sdp,这个sdp写的要与webrtc源一致)==》 RTP ==》RTMP 各种推流方法:https://www.cnblogs.com/bigben0123/p/14188475.html 整个启动流程: 1,启动kurento服务: ~/kms/kms-omni-build$ ./bin/kms-build-...

虚拟化之KVM的安装篇

1,在安装KVM之前,首先需要在自己的电脑开启cpu虚拟化技术(这个需要BIOS中设置)。 如下操作都是在本人虚拟机中设置,所以可以看到我多添加一块磁盘,目的是用来做kvm虚拟机的磁盘。 另外,虚拟机你也需要开启cpu虚拟化技术。 介于网络环境的原因,我选择NAT. 2,安装kvm前的准备工作 2.1 关闭防火墙  setenforce 0    vi...