wowothink

thinking all the time


  • 首页

  • 归档

  • 邮件

  • 博客

  • 关于

  • 搜索

Linux Kernel优化--关闭串口打印

发表于 2018-05-26 | 分类于 Linux Kernel优化
字数统计: 167 | 阅读时长 ≈ 1

使用如下patch,关闭串口打印,可以至少节省几百ms的时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
diff --git a/arch/arm64/configs/xxx_defconfig b/arch/arm64/configs/xxx_defconfig
index c8036df..81275fa 100755
--- a/arch/arm64/configs/xxx_defconfig
+++ b/arch/arm64/configs/xxx_defconfig
@@ -2985,6 +2985,7 @@ CONFIG_PRINTK_TIME=y
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_DYNAMIC_DEBUG is not set
+CONFIG_PRINTK_NOT_OUTPUT=y

#
# Compile-time checks and compiler options
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 98ee2a3..e997ad7 100755
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -1568,7 +1568,7 @@ static void call_console_drivers(int level,

if (!console_drivers)
return;
-
+#ifdef CONFIG_PRINTK_NOT_OUTPUT
for_each_console(con) {
if (exclusive_console && con != exclusive_console)
continue;
@@ -1584,6 +1584,7 @@ static void call_console_drivers(int level,
else
con->write(con, text, len);
}
+#endif
}

查找Kernel中编译的文件

发表于 2018-05-23 | 分类于 Python脚本
字数统计: 411 | 阅读时长 ≈ 2

需求:
使用SourceInsight查看源代码。要么将整个kernel的源代码添加进去,要么是需要哪个文件就添加哪个。
有没有什么办法可以将Kernel目录中编译到的.c文件统一生成一个文件,然后导入到SourceInsight去加载对应的.c文件。

我们注意到,编译kernel,如果编译了.c文件,那么在与之对应的目录下生成.o或.mod.o文件。因此,可以递归索引查找kernel目录下所有的文件,将.o过滤出来,与之对应的.c文件就是我们要查找的文件,因此有了下面的python代码。

阅读全文 »

Kernel添加全局变量

发表于 2018-05-23 | 分类于 Linux Kernel
字数统计: 353 | 阅读时长 ≈ 2

参照下面的patch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
diff --git a/arch/arm/configs/xxx_defconfig b/arch/arm/configs/xxx_defconfig
index de0e7bf..93d7202 100644
--- a/arch/arm/configs/xxx_defconfig
+++ b/arch/arm/configs/xxx_defconfig
@@ -111,4 +111,5 @@ CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=m
CONFIG_CPU_RMAP=y
CONFIG_NLATTR=y
+CONFIG_ADD_GLOBAL_VAR=y
# CONFIG_AVERAGE is not set
diff --git a/drivers/usb/core/Kconfig b/drivers/usb/core/Kconfig
index cc0ced0..60d968a 100755
--- a/drivers/usb/core/Kconfig
+++ b/drivers/usb/core/Kconfig
@@ -84,3 +84,8 @@ config USB_OTG_FSM
Implements OTG Finite State Machine as specified in On-The-Go
and Embedded Host Supplement to the USB Revision 2.0 Specification.

+config ADD_GLOBAL_VAR
+ tristate "add global variable"
+ depends on USB
+ help
+ add global variable.
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index 8d5b2f4..a4ade71 100755
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -1039,6 +1039,10 @@ static void usb_debugfs_cleanup(void)
debugfs_remove(usb_debug_root);
}

+#ifdef CONFIG_ADD_GLOBAL_VAR
+extern unsigned int k_g_usb_state;
+#endif
+
/*
* Init
*/
@@ -1049,6 +1053,10 @@ static int __init usb_init(void)
pr_info("%s: USB support disabled\n", usbcore_name);
return 0;
}
+
+ #ifdef CONFIG_ADD_GLOBAL_VAR
+ printk("[xxx] get global var,usb_state = %d\n", k_g_usb_state);
+ #endif
usb_init_pool_max();

retval = usb_debugfs_init();
@@ -1099,12 +1107,13 @@ out:
/*
* Cleanup
*/
+
static void __exit usb_exit(void)
{
/* This will matter if shutdown/reboot does exitcalls. */
if (usb_disabled())
return;
-
+
usb_deregister_device_driver(&usb_generic_driver);
usb_major_cleanup();
usb_deregister(&usbfs_driver);
diff --git a/init/main.c b/init/main.c
index 1ed674b..196de9a 100755
--- a/init/main.c
+++ b/init/main.c
@@ -110,6 +110,11 @@ bool early_boot_irqs_disabled __read_mostly;
enum system_states system_state __read_mostly;
EXPORT_SYMBOL(system_state);

+#ifdef CONFIG_ADD_GLOBAL_VAR
+unsigned int k_g_usb_state = 2;
+EXPORT_SYMBOL(k_g_usb_state);
+#endif
+
/*
* Boot command-line arguments
*/

不同版本mount用法

发表于 2018-05-23 | 分类于 碰到的问题
字数统计: 175 | 阅读时长 ≈ 1

在项目A(纯linux系统),挂载/system分区为rw的时候,使用如下命令,该命令可正常挂载。

1
# mount -o remount,rw /system

但是,在另外一个项目B上(Android系统),想要使用该命令去挂载,发现挂载失败,输出的log如下:

mount: ‘/dev/block/mmcblk0p1’->’/system’: Device or resource busy

上网搜了一下,发现是mount用法错了,修改之后如下:

1
# mount -o rw,remount /system

具体这两者的差异是由于项目A和项目B使用的命令工具不一样,前者使用busybox,后者使用toybox。具体两者关于mount命令的用法,还在继续查找。
https://landley.net/toybox/help.html
https://busybox.net/downloads/BusyBox.html

模拟kernel panic并打印堆栈信息

发表于 2018-05-22 | 分类于 Linux Kernel
字数统计: 763 | 阅读时长 ≈ 4

在kernel中,有一个函数可以用来产生panic,就是panic()函数。
本文主要讲述如何模拟产生panic以及输出堆栈信息。

阅读全文 »

lockup watchdogs & rcu stall detector

发表于 2018-05-20 | 分类于 Linux Kernel
字数统计: 3,819 | 阅读时长 ≈ 18

在嵌入式开发中,出现freeze的问题很让人头疼,就是那种不发生kernel panic,什么log不输出,串口终端死掉,无法输入输出。这时候,肯定是哪里出现了死锁或者死循环,长时间占用CPU资源,导致其他进程无法运行。
比如说,在底层的USB Host控制器驱动中,设置完某个控制寄存器,然后用while来检查状态寄存器的某一位是否满足条件。如果该控制器本身出现了问题,那么,将会一直卡在while中无法退出,此时就会出现freeze。
还有,我们有时候会看到watchdog/0进程的CPU占用率非常高,此时也有可能是哪个循环语句占用太长的时间导致的。
以下的内容参照:http://blog.csdn.net/luckyapple1028/article/details/51932414
这篇文章帮助很大,在此表示感谢。

阅读全文 »

taglist + vim + ctags + cscope

发表于 2018-05-20 | 分类于 ubuntu工具
字数统计: 764 | 阅读时长 ≈ 3

本文主要讲述taglist + vim + ctags + cscope这几个工具的安装以及结合起来使用。

阅读全文 »

printk()用法

发表于 2018-05-20 | 分类于 Linux Kernel
字数统计: 362 | 阅读时长 ≈ 2

本文将介绍__func__和__LINE__和格式化打印%p、%pf、%pF的用法。

阅读全文 »

dump_stack()用法

发表于 2018-05-19 | 分类于 Linux Kernel
字数统计: 2,442 | 阅读时长 ≈ 13

最近在看Linux USB Composite Framework的内容,经常看到函数指针跳转来跳转去。比如说会看到某个代码执行结构体中的.bind函数指针,但又不知道到底是谁在调用它。
此时,就可以用dump_stack()这个函数来追踪函数调用关系。当然,还是要自己尝试学习理解这个框架结构,不然纯粹的知道函数调用关系意义不大。另外,dump_stack()可用来定位Kernel Panic和Oop的问题,配合objdump和addr2line可以定位到哪一行的哪句代码出现问题。

阅读全文 »

Linux应用程序读写寄存器值

发表于 2018-05-19 | 分类于 Linux 性能测试
字数统计: 785 | 阅读时长 ≈ 4

需求:
在开发过程中,我们经常需要读取CPU中某个寄存器的地址,比如说读取某一个GPIO的输出状态。如读取GPIO1_IO01的值(以i.MX6为例),那么就是要读取寄存器0x0209c000中bit1的值。

  • 在Kernel中可以使用ioremap_nocache()将该地址映射出来,然后去读取。
  • 在用户程序中,可以使用mmap()去读取。下面我们将使用mmap()函数读取该寄存器的值,并写一个专门的应用程序regctl来读写任意寄存器的值。
    阅读全文 »
1…6789
Victor Huang

Victor Huang

85 日志
21 分类
20 标签
E-Mail CSDN博客
0%
  • Android编译相关8
  • Linux Kernel10
  • Linux Kernel优化5
  • Linux USB10
  • Linux driver2
  • Linux 性能测试6
  • Python脚本2
  • QNX2
  • eMMC2
  • i.MX63
  • i.MX81
  • security1
  • security i.MX1
  • u-boot2
  • ubuntu工具11
  • 在家学习嵌入式5
  • 备忘记录1
  • 碰到的问题8
  • 网站记录1
  • 调试工具2
© 2025 Victor Huang | Site words total count: 113.3k