首页 > TAG信息列表 > printk
内核模块实验2
修改驱动模块代码位置及路径 之前实验编译的lx_hello.ko是在内核源码目录文件夹中直接添加的,不方便查看阅读,因此将代码移出。 -修改Makefile 如下 KERNELDIR := ~/project/lx/android11_v2/RK3568_Android11/kernel CURRENT_PATH := $(shell pwd) obj-m := lx_hello.o build: k编写一个简单的linux kernel rootkit
一、前言 linux kernel rootkit跟普通的应用层rootkit个人感觉不大,个人感觉区别在于一个运行在用户空间中,一个运行在内核空间中;另一个则是编写时调用的API跟应用层rootkit不同 一个最简单的linux kernel rootkit就是一个linux kernel module PS:如有错误,请斧正 二、环境 内核版本:5xenomai任务测试
点击查看代码 /* * Copyright (C) 2019 BNIS * Make file 请参考过往博客 * 本例程在模块初始化时启动3个任务。在任务1中,实现了类似定时器 * 的定时功能,通过第2任务去结束第1任务,任务3启动后等待任务2结束再继续执行. * */ #include <linux/module.h> #include <rtdm/d迅为iTOP-RK3568开发板编写LED驱动
我们在 ubuntu 的 home/nfs/07 目录下新建 led.c 文件,可以在上次实验的驱动代码基础上进行修改,以 下代码为完整的驱动代码。我们已经学会了杂项设备驱动编写的基本流程,其实需求已经完成了一半了,我们已经注册了杂项设 备,并生成了设备节点。接下来我们要完成控制 BEEP 的逻辑操作,那嵌入式开发记录-补充02:IO模型
1、阻塞:参考:https://www.sohu.com/a/258717832_781584 当条件不满足的时候,应用进程睡眠; struct __wait_queue { unsigned int flags; void *private; wait_queue_func_t func; struct list_head task_list; }; typedef struct __wait_queue wait_queue_t;记录CentOS7下编写驱动模块
记录Centos7下编写驱动模块 参考自以下文章。 Linux驱动基础开发 Linux内核入门——驱动模块 《嵌入式应用程序设计》--华清远见 1.最简单模块 hello.c #include<linux/init.h> #include<linux/module.h> int __init start(void) { printk(KERN_INFO "this is module onload fin通过/proc/sys/kernel/printk设置打印级别
cat /proc/sys/kernel/printk 4 4 1 7 共有4个参数 4 4 1 7 (1)第一个参数 4表示小于4优先级消息才会被输出到控制台,通过设置参数可以控制打印到控制台的日志级别,也就是,数字越大,会有越多的日志输出到控制台。 (2)第二个参数4 表示默认的printk消息优先级别,即printk(“hell world”);led_drv
#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/device.h>#include <linux/slab.h> #include <asm/uaccess.h>#include <asm/io.h> //设计一个类型,描述一个设备的信息struct led_desc{ unsigned int devplatform_device
platform_device: #include <linux/kernel.h> #include <linux/init.h> #include <linux/types.h> #include <linux/spinlock.h> #include <linux/blkdev.h> #include <linux/module.h> #include <linux/fs.h> #include <lLinux驱动开发一.字符设备框架——4.驱动测试
在前面的三章里我们完成了驱动的框架、应用程序的编写,但是并没有实现文件的实际读写功能(只是通过内核打印出了调试信息)。这一章我们着重实现文件实际的读写效果。 由于没有实际数据IO,我们只是在驱动中定义一个数据传递给应用程序;在应用程序中定义个用户数据用来传递给内核(驱动)修改/dev/kmsg时间戳格式(printk.c)
修改 cat /dev/kmsg 输出log的时间戳,达到与dmesg输出的格式效果一致 6,64,2484633,-;Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000) 6,65,2484669,-;pid_max: default: 32768 minimum: 301 6,66,2484938,-;Mount-cac转载printk 调试
5. printk的格式字符 常见的数据类型对应的printk的格式字符如下: int %d or %x unsigned int %u, %x long %ld, %lx unsigned long %lu, %lx long long %lld, %llx unsigned long long %llu, %llx size_t %zu, %zx ssize_t %zd, %zx 5.1 打Linux内核各模块启动时间分析【转】
转自:https://blog.csdn.net/chenwenxin/article/details/41550193?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blogLinux内核4.14版本——DMA Engine框架分析(6)-实战(测试dma驱动)
1. dw-axi-dmac驱动 2. dma的测试程序 2.1 内核程序 2.2 用户测试程序 1. dw-axi-dmac驱动 dw-axi-dmac驱动4.14版本没有,是从5.4版本移植的,基本没有修改,这里不做介绍。linux-5.4\drivers\dma\dw-axi-dmac\dw-axi-dmac-platform.c 2. dma的测试程序 2.1 内核程序 以模块.ko的关于Linux内存寻址与页表处理的一些细节
我们很容易从一些Linux内核的书籍中知道X86架构使用2级( 10-10-12 )页表,X86-64架构使用4级( 9-9-9-9-12 )页表甚至是5级(在pgd_t与pud_t中间加了一层p4d_t),但是一些隐藏的问题却往往被忽略,如每一个进程的页表存储在内核空间吗?为什么内核中页表所在页框物理地址转化为虚拟地址只需linux(安卓)休眠后,printk保持打印
一.源码修改 1.打开文件 printk.c 路径:kernel\kernel\printk\printk.c 2.修改 函数:static int __init console_setup(char *str){} 最后添加: console_suspend_enabled = false; 重新编译即可。 最后,希望可以帮到大家,如果有用的就收藏一下,白嫖的就点个赞。迅为瑞芯微3399开发板Android系统-打印级别设置
1 printk 日志等级设置在内核源码 include/linux/kern_levels.h 文件中预定义了内核 log 等级,一共有八个等级,从 0 到 7,优先级依次降低,如下所示:// include/linux/kern_levels.h#define KERN_SOH "\001" /* ASCII Start Of Header */#define KERN_SOH_ASCII '\001' #define KERN_EME设备树-平台总线
设备树设备和平台设备的关系 平台总线会将name相同的device和driver进行匹配,执行driver中的probe 设备树描述的节点会生成对应的设备树device,我这里理解为设备树也向平台总线注册了device,可以在/sys/devices/platform/目录下看到 driver也可以通过平台总线和设备树中的节点设备进linux学习--2021/9/12
linux简单字符驱动(运行在电脑上,没有运行在开发板上) 文章目录 1.须知2.具体步骤3.我的操作步骤4.源码及下载1.Makefile2.chrdevbase.c3.chrdevbaseApp.c 1.须知 写在前面: 驱动模块运行在linux中,满足条件: 1.编译的时候,架构要和电脑架构一样 输入 arch 可查看架构 如嵌入式学习记录3----自动创建设备节点,实现读写接口
1、自动创建设备节点 涉及的函数: struct class *class_create(struct module *owner, const char *name); ----在/sys/class/目录下会创建对应的类 void class_destroy(struct class *cls) struct device *device_create(struct class *class, struct device *parent,中断下文之tasklet -29
中断下文之tasklet tasklet相关知识点 什么是 tasklet? tasklet 是中断处理中断下文常用的一种方法,tasklet,是一种特殊的软中断。处理中断下文的机制还有工作队列和软中断。 怎么使用tasklet来设计中断下文? 中断发生 》》》》 中断上文,在中断处理一些紧急的事情 》》》》 调平台总线probe函数的编写-16
平台总线probe函数的编写 编写probe函数的思路: 从device.c里面获得硬件资源 方式一:直接获得,不推荐方法二:只用函数获得 #include <linux/platform_device.h> extern struct resource *platform_get_resource(struct platform_device *,unsigned int, unsigned int); 参数Linux驱动之设备树
14、设备树 1、什么是设备树? 设备树是一种描述硬件资源的数据结构, 它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。 2、设备树的由来 要想了解为什么会有设备树,设备树是怎么来的,我们就要先来回顾一下在没有设备树之前我们是怎么来写一个驱动程序的。30.Linux-printk分析、使用__FILE__, __FUNCTION__, __LINE__ 调试
1.在驱动调试中,使用printk(),是最简单,最方便的办法 当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上 当uboot的命令行里的“console=ttySA0,115200”时,表示printk()输出在串口UART0上,波特率=115200 当uboot的命令行里的“console=tty1 cons2. 字符串设备的创建
#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/device.h> // 主从设备号(高12位为主设备号,底20位为从设备号)~~~in include/linux/types.h static dev_t s_dev; // 设备类 static struct class *s_class; // 自动创建最大设备