博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 驱动开发笔记(一)
阅读量:7262 次
发布时间:2019-06-29

本文共 2058 字,大约阅读时间需要 6 分钟。

1、查看printk函数日记输出

(1)使用字符终端;通常使用ctrl+alt+f1切换查看;

(2)使用cat /proc/kmsg命令;(在Linux系统启动后,/proc/kmsg文件可以查看内核对外所用的符号表,可以用cat命令查看器内容。)

(3)使用dmesg命令查看。

linux/kernel.h文件定义的printk函数的Log Level:

常数定义语句

意义

#define KERN_EMERG “<0>”/*系统不运行*/
#define KERN_ALERT “<1>”/*总是输出*/
#define KERN_CRIT “<2>”/*关键信息*/
#define KERN_ERR “<3>”/*error信息*/
#define KERN_WARNING “<4>”/*提示信息*/
#define KERN_NOTICE “<5>”/*正常信息*/
#define KERN_INFO “<6>”/*系统信息*/
#define KERN_DEBUG “<7>”/*调试信息*/

 

使用例子:

printk(KERN_ALERT “hello world\n”);

printk(“<1>””hello world\n”);

2、模块操作的一些命令:

(1)insmod  加载模块到内核

(2)rmmod  从内核中卸载模块

(3)ismod  查看内核中加载的模块目录

(4)depmod 生成模块间依赖性信息

(5)modprobe  加载或者卸载模块(用于模块自动安装功能)

(6)lsmod  显示加载到内核中的模块状态

3、最基本Makefile文件分析(kernel 2.6):

(1)定义生成模块的名称

obj-m := test.o

module-objs := test1.o test2.o test3.o

(2)指定源代码的位置

KDIR := /lib/modules/$(shell uname –r)/build

(3)指定编译模块源代码所在位置的当前目录

PWD := $(shell pwd)

(4)指定编译模块的命令

default:        $(MAKE) –C $(KDIR) SUBDIRS=$(PWD) modules
或者 $(MAKE) –C $(KDIR) M=$(PWD) modules

(5)清除生成的文件

clean:

         rm –rf *ko

         rm –rf *.mod.*

         rm –rf .*.cmd

         rm –rf *.o

4、变量数据类型

变量数据类型在头文件:

#include <asm/types.h>

常用的数据类型:

 

__s8, s8 8位带符号的正数(字节)
__s16, s16 16位带符号的正数(字)
__s32, s32 32位带符号的正数
__s64, s64 64位带符号的正数
__u8, u8 8位不带符号的正数(字节)
__u16, u16 16位不带符号的正数(字)
__u32, u32 32位不带符号的正数
__u64, u64 64位不带符号的正数

 

5、动态内存

(1)kmalloc , kfree

使用kmalloc()函数时刻分配的大小为32 x PAGE_SIZE。大多数系统中PAGE_SIZE的大小为4096。

    (a)GFP_KERNEL代表请求动态内存一定要成功,否则等待足够的空间。
    (b)GFP_ATOMIC:内核存在可分配内存时,无条件分配内存,若没有就立即释放NULL。
    (c)GFP_DMA:用于分配连续的物理内存。

#include 
char *buff;buff = vmalloc(1024, GFP_KERNEL);//buff = vmalloc(32 * PAGE_SIZE, GFP_KERNEL);if(buff != NULL){//TODOkfree(buff);}else{//TODO}

(2)vmalloc, vfree

#include 
char *buff;buff = vmalloc(1024);//buff = vmalloc(32 * PAGE_SIZE);if(buff != NULL){//TODOvfree(buff);}else{//TODO}

(3)__get_free_pages, free_pages

#include 
char *buff;int order;order = get_order(8192);buff = __get_free_pages(GFP_KERNEL, order);if(buff != NULL){//TODOfree_pages(buff, order);}else{//TODO}

转载于:https://www.cnblogs.com/ikaka/p/3789870.html

你可能感兴趣的文章
[webpack3.8.1]Guides-3-Asset Management(资源管理)
查看>>
Linux下libevent库的基础安装和安装错误的解决方案以及使用
查看>>
Makefile 速查笔记
查看>>
Go基础学习二之常用命令、包、变量、常量、控制语句、range
查看>>
【前端自动化测试】Karma + Jasmine + RequireJS 的自动化测试实现
查看>>
Webpack + Vue2 + Koa2 构建应用
查看>>
Spring Boot自定义隐式JSON映射程序的最简单方法
查看>>
JavaScript学习篇--本地存储
查看>>
一份关于webpack2和模块打包的新手指南
查看>>
JavaScript模块化编程探索
查看>>
微信&小程序 - 收藏集 - 掘金
查看>>
velocity的基本使用 && 实例讲解
查看>>
高级PHP工程师应该具备的一些技能
查看>>
使用redis—geo api实现搜索附近的人,自己写的一个composer包
查看>>
IE8浏览器下,解决jQuery append方法不生效的问题
查看>>
JS进阶篇--window.requestAnimationFrame与Tween.js配合使用实现动画缓动效果
查看>>
如何定制 Horizon
查看>>
快手服务治理平台KESS的设计理念和实战
查看>>
过早扩张、未经检验的技术,创业公司最易跳入哪些致命陷阱?
查看>>
重构了后端服务,我学到了这些东西
查看>>