首页 > 其他分享 >驱动调试_prink

驱动调试_prink

时间:2023-09-06 14:57:11浏览次数:36  
标签:__ kernel console prink loglevel setup 驱动 printk 调试

驱动调试之printk的原理

UBOOT传入 console=ttySAC0 console=tty1

1. 内核处理UBOOT传入的参数
	__setup("console=", console_setup);		//当内核处理参数时,会调用console_setup来处理		//Linux-4.9.88\kernel\printk\printk.c
	console_setup
		add_preferred_console // 我想用名为"ttySAC0"的控制台,先记录下来

2. 硬件驱动的入口函数里:
	drivers/serial/s3c2410.c
		register_console(&s3c24xx_serial_console);		//与 console_setup 内添加的匹配,s3c24xx_serial_console 是结构体,含有.name,.write成员

3. printk
		vprintk
			/* Emit the output into the temporary buffer */
			// 先把输出信息放入临时BUFFER
			vscnprintf
			
			// Copy the output into log_buf.
			// 把临时BUFFER里的数据稍作处理,再写入log_buf						
			// 比如printk("abc")会得到"<4>abc", 再写入log_buf					添加打印级别,如没有,则默认添加为<4>
			// 可以用dmesg命令把log_buf里的数据打印出来重现内核的输出信息		//可以通过 cat /proc/kmsg,dmesg 查看
			
			
			// 调用硬件的write函数输出
			release_console_sem();
				call_console_drivers(_con_start, _log_end);
					// 从log_buf得到数据,算出打印级别
					_call_console_drivers(start_print, cur_index, msg_level);			
						// 如果可以级别够格打印
						if ((msg_log_level < console_loglevel								//打印级别判断,是否打印
							__call_console_drivers
								con->write(con, &LOG_BUF(start), end - start);				//即调用s3c24xx_serial_console 的.write函数

驱动调试之printk的使用

(1)内核运行时,可定义是否打印调试信息
	printk(KERN_DEBUG"%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);		
	可通过 cat /proc/sys/kernel/printk  查看记录级别,console_loglevel、default_message_loglevel、minimum_console_loglevel和default_console_loglevel。
	echo "1 4 1 7" > /proc/sys/kernel/printk		//大于1级别的 所有的printk信息都不会被打印
	echo "8 4 1 7" > /proc/sys/kernel/printk		//可打印KERN_DEBUG(级别为7) 级别的信息

(2)uboot传入参数,定义是否打印信息
	static int __init loglevel(char* str)
	{
		get_option(&str, &console_loglevel);
		return 1;
	}
	__setup("loglevel=", loglevel)						//可在uboot命令行传入loglevel=X,修改 console_loglevel 级别


	static int __init debug_kernel(char *str)
	{
		if (*str)
			return 0;
		console_loglevel = 10;
		return 1;
	}

	static int __init quiet_kernel(char *str)
	{
		if (*str)
			return 0;
		console_loglevel = 4;
		return 1;
	}

	__setup("debug", debug_kernel);
	__setup("quiet", quiet_kernel);

参考:韦东山Linux教程

标签:__,kernel,console,prink,loglevel,setup,驱动,printk,调试
From: https://www.cnblogs.com/charlie12345/p/17682280.html

相关文章

  • android调试工具--dumpsys
    dumpsys执行格式为:dumpsys[option] 其中option参数可以为service和acitivity,参数service可以是系统中任意一个服务,比如meminfo服务显示内存信息,cpuinfo现实cpu信息参数acitivity可以现实所有的activity信息......
  • 20.2 设备树中的 platform 驱动编写
    一、设备树下的platform驱动  platform驱动框架分为总线、设备和驱动,总线不需要我们去管理,这个是Linux内核提供。在有了设备树的前提下,我们只需要实现platform_driver即可。 1. 修改pinctrl-stm32.c文件   先复习一下pinctrl子系统和gpio子系统,pinctrl子......
  • “数据驱动”时代,企业为什么需要实时湖仓?
    当谈到数据湖的时候,大家都在说,可以把所有数据(结构化/半结构化/非结构化)一股脑都丢进去,进行统一的元数据管理。然后上层计算对接,进行流批计算/OLAP分析/算法分析。这个没问题,数据湖确实能承接底层的这部分能力,但是同时出现的问题也是不容忽视的。本文将关注讨论,利用湖仓架构,统一......
  • Windows驱动程序是支持多线程【chatgpt】
    是的,Windows驱动程序是支持多线程的。驱动程序是运行在操作系统内核空间的软件模块,可以通过创建和管理多个线程来实现并发处理的能力。通过多线程,驱动程序可以同时处理多个请求或事件,提高系统的响应性能和并发处理能力。在Windows驱动程序的开发中,可以使用内核模式线程来执行异步......
  • Java反序列化:CommonsCollections5调试分析
    基础知识1.BadAttributeValueExpException相关源码可以看到这个异常类的支持序列化和反序列化,同时在反序列化readObject函数中会涉及到toString函数publicclassBadAttributeValueExpExceptionextendsException{/*Serialversion*/privatestaticfinal......
  • 记录--CSS 滚动驱动动画 scroll()
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助CSS滚动驱动动画scroll()animation-timeline通过scroll()指定可滚动元素与滚动轴来为容器动画提供一个匿名的scrollprogresstimeline.通过元素在顶部和底部(或左边和右边)的滚动推进scrollprogresst......
  • LED汽车尾灯驱动IC 3~36v输出电流AP5165B降压恒流芯片
    产品描述AP5165B是一款外围电路简单的连续电流模式的降压型LED恒流驱动芯片。在输入电压高于LED电压时,可以有效地用于驱动一颗或者多颗串联LED。输出电流可调,最大可达1A。适用于3-36V电压范围的非隔离式恒流LED驱动领域。AP5165B内置功率开关和一个高端电流检测电路,可以......
  • LED灯降压恒流驱动芯片5~60v输出1.5A大电流AP51656
    产品描述AP51656是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED输入电压范围从5V到60V,输出电流最大可达1.5A。根据不同的输入电压和外部器件,可以驱动高达数十瓦的LED。内置功率开关,采用高端电流采样设置LED平均电流,通过DIM引脚可以接受模拟调光和......
  • LED汽车尾灯驱动IC 3~36v输出电流AP5165B降压恒流芯片
    AP5165B是一款外围电路简单的连续电流模式的降压型LED恒流驱动芯片。在输入电压高于LED电压时,可以有效地用于驱动一颗或者多颗串联LED。输出电流可调,最大可达1A。适用于3-36V电压范围的非隔离式恒流LED驱动领域。AP5165B内置功率开关和一个高端电流检测电路,可以使用外部......
  • LED灯降压恒流驱动芯片5~60v输出1.5A大电流AP51656
    AP51656是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED输入电压范围从5V到60V,输出电流最大可达1.5A。根据不同的输入电压和外部器件,可以驱动高达数十瓦的LED。内置功率开关,采用高端电流采样设置LED平均电流,通过DIM引脚可以接受模拟调光和很宽范围......