LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

2019年10月15日

一个EMFILE问题定位:lsof、ulimit的应用,以及简单分析

摘要:关键词:errno、EMFILE、ulimit、lsof等等。 背景是在对程序进行压力测试,运行了一段时间之后出现一个复位操作失败。 这个复位操作通过打开一个设备,进行读写操作,已达到控制GPIO输入输出的目的。 1. 初步分析原因 经过初步分析发觉fopen()返回NULL指针,说明fopen() 阅读全文

posted @ 2019-10-15 00:00 ArnoldLu 阅读 (30) 评论 (0) 编辑

2019年10月7日

gcc栈溢出保护机制:stack-protector

摘要:关键词:stack-protector、stack-protector-strong、stack-protector-all等等。 1. gcc栈保护机制stack-protector简介 gcc提供了栈保护机制stack-protector。关于stack-protector包含三个选项,分别是s 阅读全文

posted @ 2019-10-07 00:00 ArnoldLu 阅读 (261) 评论 (0) 编辑

2019年10月3日

fstab是什么?被谁用?怎么写?

摘要:关键词:fstab、mount -a、fsck等等。 1. fstab是干什么的? fstab是file system table的意思,即文件系统表。 它在开机的时候告诉系统挂载哪些分区、挂载点是什么、以什么格式挂载、挂载的选项等等。 然后系统在开机的时候就根据fstab内容,执行挂载操作。在挂载 阅读全文

posted @ 2019-10-03 00:00 ArnoldLu 阅读 (108) 评论 (0) 编辑

2019年9月28日

一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls)

摘要:关键词:sqllite、meminfo、slabinfo、alloc_calls、nand、SUnreclaim等等。 下面记录一个由于驱动导致的内存泄漏问题分析过程。 首先介绍问题背景,在一款嵌入式设备上,新使用sqllite库进行数据库操作,在操作数据(大量读写操作)一段时间之后,发生OOM现象 阅读全文

posted @ 2019-09-28 00:00 ArnoldLu 阅读 (144) 评论 (0) 编辑

2019年9月22日

Ubuntu下doxygen+graphviz使用概录

摘要:关键词:doxygen、Doxyfile、doxywizard、dot、graphviz等等。 使用doxygen从源码注释生成帮助文档或者SDK,输出格式有多种比如htmp、Latex等等。 如果想可视化头文件关系、函数调用关系,可以生成dot格式的布局方式;然后使用graphviz的dot工具生 阅读全文

posted @ 2019-09-22 00:00 ArnoldLu 阅读 (81) 评论 (0) 编辑

2019年9月15日

记录Ubuntu下使用docker使用

摘要:关键词:docker、Dockerfile等等。 这里主要记录Ubuntu下docker使用细节。 首先是如何安装,然后如何创建docker镜像、搭建docker服务器、运行使用docker。 1. docker安装 2. 创建docker镜像 创建docker镜像文件,可以通过docker bui 阅读全文

posted @ 2019-09-15 00:00 ArnoldLu 阅读 (91) 评论 (0) 编辑

2019年9月8日

hidraw设备简要分析

摘要:关键词:hid、hidraw、usbhid、hidp等等。 下面首先介绍hidraw设备主要用途,然后简要分析hidraw设备驱动(但是不涉及到相关USB/Bluwtooth驱动),最后分析用户空间接口并实例。 1. hidraw介绍 在内核Documentation/hid/hidraw.txt中 阅读全文

posted @ 2019-09-08 00:00 ArnoldLu 阅读 (193) 评论 (0) 编辑

2019年9月7日

一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img

摘要:关键词:dd、fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img等等。 一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统。 二进制在烧录的时候比较简单,将二进制数据写入存储设 阅读全文

posted @ 2019-09-07 00:00 ArnoldLu 阅读 (228) 评论 (0) 编辑

2019年8月4日

bootrom/spl/uboot/linux逐级加载是如何实现的?

摘要:关键词:bootrom、spl、uboot、linux、mksheader、sb_header、mkimage、image_header_t等等。 首先看一个典型的bootrom->spl->uboot->linux流程log,主要分为4个部分,中间有3个衔接点。 下面主要分析不同阶段之间如何衔接。 阅读全文

posted @ 2019-08-04 00:00 ArnoldLu 阅读 (270) 评论 (0) 编辑

2019年7月28日

Linux uevent分析、用户接收uevent以及mdev分析

摘要:关键词:uevent、netlink、ADD/REMOVE/CHANGE、uevent_helper、hotplug、usermode helper、mdev、mdev.conf等等。 本文从三方面了解uevent相关内容:内核中uevent如何传送、用户空间如何处理uevent、如何通过mdev实 阅读全文

posted @ 2019-07-28 00:00 ArnoldLu 阅读 (392) 评论 (0) 编辑

2019年7月27日

sched_yield()和nanosleep()对进程调度的影响

摘要:关键词:sched_yield()、nanosleep()等等。 sched_yield()主动放弃CPU执行权,nanosleep()是睡眠一段时间后再唤醒。 1. sched_yield()实现 sched_yield()会主动放弃当前CPU给其他进程使用;但是如果当前CPU上无其他进程等待执行 阅读全文

posted @ 2019-07-27 00:00 ArnoldLu 阅读 (172) 评论 (0) 编辑

2019年7月21日

Linux Thermal Framework分析及实施

摘要:关键词:Zone、Cooling、Governor、Step Wise、Fair Share、trip等等。 Linux Thermal的目的是控制系统运行过程中采样点温度,避免温度过高造成器件损坏,确保芯片长期稳定工作。 整个Thermal框架可以分为四部分: Thermal Driver负责将获 阅读全文

posted @ 2019-07-21 00:00 ArnoldLu 阅读 (303) 评论 (0) 编辑

2019年7月14日

向busybox中添加自己的applet

摘要:关键词:buysbox、applet等。 busybox常用于嵌入式环境,集成中断Linux命令和工具。这些工具简单高效。 下面从如下方面了解: 这些命令是一个软链接到busybox,那么是如何从软连接到busybox再到执行相应的功能的? 如何添加自己的applet命令,进而扩展busybox? 阅读全文

posted @ 2019-07-14 00:00 ArnoldLu 阅读 (178) 评论 (0) 编辑

2019年7月12日

coredump配置、产生、分析以及分析示例

摘要:关键词:coredump、core_pattern、coredump_filter等等。 应用程序在运行过程中由于各种异常或者bug导致退出,在满足一定条件下产生一个core文件。 通常core文件包含了程序运行时内存、寄存器状态、堆栈指针、内存管理信息以及函数调用堆栈信息。 core就是程序当前工 阅读全文

posted @ 2019-07-12 00:00 ArnoldLu 阅读 (675) 评论 (0) 编辑

2019年7月11日

《Linux/UNIX系统编程手册》第56章 SOCKET:介绍

摘要:关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket。socket是一个允许通信的设备,两个应用程序都需要用到它。 服务器将自己的socket绑定到一个众所周知的地址上是的客户端能够定位到它的位置。 关键so 阅读全文

posted @ 2019-07-11 00:00 ArnoldLu 阅读 (129) 评论 (0) 编辑

2019年7月7日

Linux下新增和使用系统调用

摘要:关键词:__SYSCALL()、SYSCALL_DEFINEx()、syscall()等等。 1. 为什么使用syscall 内核和用户空间数据交换有很多种方式:sysfs、proc、信号等等。 但是syscall效率要高于这些方式,使用起来也更加简单。 缺点是可移植性差,对于新增的系统调用,需要内 阅读全文

posted @ 2019-07-07 00:00 ArnoldLu 阅读 (86) 评论 (0) 编辑

2019年7月4日

多个git合并,并保留log历史记录

摘要:面临的需求是:将多个git仓库作为一个单独目录,整合到一个新的git仓库中;并且保留历史记录。 1. 新建一个summary仓库 新建一个summary仓库,用于整合一系列git仓库。 2. 将其它git仓库merge到summary中 至此就将memory仓库的内容merge到了summary仓库 阅读全文

posted @ 2019-07-04 00:00 ArnoldLu 阅读 (446) 评论 (0) 编辑

2019年7月2日

简单理解Busybox下halt/poweroff/reboot实现及区别

摘要:关键词:halt/poweroff/reboot、reboot()、SIGUSR1/SIGTERM/SIGUSR2等。 1. busybox下的halt/poweroff/reboot实现 通过applets.h下的halt/poweroff/reboot可知,实现都在halt_main()中。 下 阅读全文

posted @ 2019-07-02 00:00 ArnoldLu 阅读 (244) 评论 (0) 编辑

2019年6月16日

Linux方案级ROM/RAM优化记录

摘要:关键词:readelf、bloat-o-meter、graph-size、totalram_pages、reserved、meminfo、PSS、procrank、maps等等。 根据项目的需求,进行ROM/RAM的低成本裁剪。 在进行优化之前,(1)首要任务是对待优化的方案进行量化,从ROM来看有 阅读全文

posted @ 2019-06-16 00:00 ArnoldLu 阅读 (262) 评论 (0) 编辑

2019年6月10日

ramdisk配置、解压、创建rootfs、启动简单分析

摘要:关键词:ramdisk、rdint、.init.ramfs、__initramfs_start、__initramfs_size、rootfs、ramfs、populate_rootfs()、gzip、actions[]、free_initmem()、run_init_process()等等。 本着 阅读全文

posted @ 2019-06-10 00:00 ArnoldLu 阅读 (666) 评论 (0) 编辑

2019年5月27日

通过JTAG对比内核启动后text/rodata段内容

摘要:关键词:vmlinux、strip、dump、_text、__end_rodata等等。 在日常的调试中,可能会在某些情况下踩到内核重要的数据,比如代码段或者rodata之类。 这种情况下,需要确认这些数据是否异常。 所谓的异常就是从DDR中读出的数据能否和vmlinux对上。 1. 准备vmlin 阅读全文

posted @ 2019-05-27 00:00 ArnoldLu 阅读 (115) 评论 (0) 编辑

2019年5月18日

busybox启动流程简单解析:从init到shell login

摘要:关键词:kernel_init()、init、inittab、wait/waitpid、fork/vfork、setsid()、execvp/execlp、dup2等等。 由于遇到一系列定制,从init开始加载不同服务,对服务异常等需要特殊处理。 如何在恰当的时机加载恰当的服务?如何对不同异常进行特 阅读全文

posted @ 2019-05-18 00:00 ArnoldLu 阅读 (1871) 评论 (0) 编辑

2019年5月12日

CK:User mode Bus Error(用户空间操作内核地址导致的异常)

摘要:关键词:VEC_ACCESS、coredump、LR、PC等。 CK中存在一种VEC_ACCESS异常,可能原因是用户空间访问了内核空间,还有一种是内核访问不存在的总线地址。 下面简单构造VEC_ACCESS异常,包括变量指针异常和函数指针异常并分析。 1. 变量指针异常 执行后异常输出如下,并生成 阅读全文

posted @ 2019-05-12 00:00 ArnoldLu 阅读 (180) 评论 (0) 编辑

2019年5月5日

非法指令(Illegal Instruction)问题定位

摘要:关键词:Illegal Instruction、SIGILL等。 进程在运行过程中会收到SIGILL信号,此类错误是由操作系统发送给进程的。 SIGILL是某个进程中的某一句不能被CPU识别指令,这些指令可能是一些形式错误、未知或者特权指令。 1. SIGILL原因 1.1 错误修改代码段 进程代码 阅读全文

posted @ 2019-05-05 00:00 ArnoldLu 阅读 (2072) 评论 (0) 编辑

glibc提供的malloc()的调试工具

摘要:关键词:MALLOC_CHECK_、mtrace()、muntrace()、MALLOC_TRACE、mprobe()、-lmcheck等等。 1. MALLOC_CHECK_环境变量(double free) MALLOC_CHECK_提供了类似于mcheck()和mprobe()函数的功能,但是 阅读全文

posted @ 2019-05-05 00:00 ArnoldLu 阅读 (515) 评论 (0) 编辑

2019年4月30日

/proc/xxx/maps简要记录

摘要:定位内存泄漏基本上是从宏观到微观,进而定位到代码位置。 从/proc/meminfo可以看到整个系统内存消耗情况,使用top可以看到每个进程的VIRT(虚拟内存)和RES(实际占用内存),基本上就可以将泄漏内存定位到进程范围。 之前也大概了解过/proc/self/maps,基于里面信息能大概判断泄 阅读全文

posted @ 2019-04-30 00:00 ArnoldLu 阅读 (679) 评论 (0) 编辑

2019年4月24日

Linux和Uboot下eMMC boot分区读写

摘要:关键词:eMMC boot、PARTITION_CONFIG、force_ro等。 1. eMMC的分区 大部分eMMC都有类似如下的分区,其中BOOT、RPMB和UDA一般是默认存在的,gpp分区需要手动创建。 BOOT主要是为了支持从eMMC启动系统而设计的;RPMB即Replay Protec 阅读全文

posted @ 2019-04-24 14:03 ArnoldLu 阅读 (3384) 评论 (0) 编辑

2019年4月19日

devmem读写物理内存和devkmem读取内核虚拟内存

摘要:关键词:/dev/mem、/dev/kmem、mmap、__va、__pa、remap_pfn_range等等。 在日常工作中常有直接操作寄存器或者某一物理地址的需求,busybox中提供了devmem。通过它可以读写物理内存。 它的实现借助mmap和/dev/mem,通过mmap将/dev/mem 阅读全文

posted @ 2019-04-19 10:01 ArnoldLu 阅读 (827) 评论 (0) 编辑

2019年4月11日

warn_alloc():page allocation failure问题分析

摘要:关键词:warn_alloc()、__GFP_XXX、order、CMA等等。 在内存申请的时候经常会遇到类似“ xxx: page allocation failure: order:10...”类型的问题,这是warn_alloc()的输出。 warn_alloc()被如下函数调用:__allo 阅读全文

posted @ 2019-04-11 17:24 ArnoldLu 阅读 (774) 评论 (0) 编辑

2019年4月3日

Busybox的syslogd认识与使用

摘要:关键词:rcS、start-stop-daemon、syslogd、syslog()、klogd、klogctl()、syslog.conf、/dev/log、facility/level等等。 syslog用来记录应用程序或者硬件设备的日志;通过syslogd这个进程记录系统有关事件记录,也可以记 阅读全文

posted @ 2019-04-03 17:06 ArnoldLu 阅读 (1384) 评论 (0) 编辑

2019年3月15日

使用sz/rz基于串口传输文件

摘要:关键词:lrzsz、minicom、ZMODEM、MD5sum等。 在环境受限的嵌入式系统上,往往只有串口可以使用。 此时如果需要传输文件,需要借助rz/sz工具,可以使用的传输协议有ZMODEM、YMODEM、XMODEM,一般首选的是ZMODEM。 这里记录minicom下使用rz/sz进行文件 阅读全文

posted @ 2019-03-15 15:48 ArnoldLu 阅读 (287) 评论 (0) 编辑

2019年3月14日

Linux Hung Task分析

摘要:关键词:khungtaskd、TASK_UNINTERRUPTIBLE、nvcsw、nivcsw、last_switch_count等等。 经常会遇到内核打印“INFO: task xxx:xxx blocked for more than 120 seconds.”这样的log信息,这是内核的hu 阅读全文

posted @ 2019-03-14 13:03 ArnoldLu 阅读 (668) 评论 (0) 编辑

2019年3月13日

Linux内存都去哪了:(1)分析memblock在启动过程中对内存的影响

摘要:关键词:memblock、totalram_pages、meminfo、MemTotal、CMA等。 最近在做低成本方案,需要研究一整块RAM都用在哪里了? 最直观的的就是通过/proc/meminfo查看MemTotal,实际上可能远小于RAM物理大小。 这里有个明显的分界点:在free_init 阅读全文

posted @ 2019-03-13 21:45 ArnoldLu 阅读 (1131) 评论 (0) 编辑

2019年2月11日

《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll

摘要:关键词:fasync_helper、kill_async、sigsuspend、sigaction、fcntl、F_SETOWN_EX、F_SETSIG、select()、poll()、poll_wait()等。 《Linux/UNIX系统编程手册》第63章主要介绍了select()/poll()、 阅读全文

posted @ 2019-02-11 23:04 ArnoldLu 阅读 (355) 评论 (0) 编辑

2019年2月10日

Linux内核和用户空间通信之netlink

摘要:1. netlink Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在Linu 阅读全文

posted @ 2019-02-10 00:00 ArnoldLu 阅读 (167) 评论 (0) 编辑

2019年1月31日

Linux soft lockup分析

摘要:关键词:watchdog、soft lockup、percpu thread、lockdep等。 近日遇到一个soft lockup问题,打印类似“[ 56.032356] NMI watchdog: BUG: soft lockup - CPU#0 stuck for 23s! [cat:153] 阅读全文

posted @ 2019-01-31 18:16 ArnoldLu 阅读 (1110) 评论 (0) 编辑

2019年1月29日

一款DMA性能优化记录:异步传输和指定实时信号做async IO

摘要:关键词:DMA、sync、async、SIGIO、F_SETSIG。 DMA本身用于减轻CPU负担,进行CPU off-load搬运工作。 在DMA驱动内部实现有同步和异步模式,异步模式使用dma_async_issue_pending(),然后在callback()中发送SIGIO信号,用户空间收 阅读全文

posted @ 2019-01-29 22:24 ArnoldLu 阅读 (633) 评论 (0) 编辑

Linux下时钟框架实践---一款芯片的时钟树配置

摘要:关键词:时钟、PLL、Mux、Divider、Gate、clk_summary等。 时钟和电源是各种设备的基础设施,整个时钟框架可以抽象为几种基本的元器件:负责提供晶振 Linux内核提供了良好的CCF(Common Clock Framework),框架的两端一个是provider,一个是cons 阅读全文

posted @ 2019-01-29 22:15 ArnoldLu 阅读 (799) 评论 (0) 编辑

2019年1月17日

使用Kernel NetEm和tc模拟复杂网络环境

摘要:关键词:netem(Network Emulator)、tc(Traffic Control)。 大部分局域网环境良好,但是产品实际网络环境可能千差万别,为了对产品进行各种情况测试就需要模拟网络环境。 Linux内核network模块提供了NetworkEmulator功能,结合iproute2的t 阅读全文

posted @ 2019-01-17 11:08 ArnoldLu 阅读 (187) 评论 (0) 编辑

2019年1月4日

使用Flame Graph进行系统性能分析

摘要:关键词:Flame Graph、perf、perl。 FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图。 从底向上像火苗一样逐渐变小,也反映了相互之间的包含关系,下面的框条包含上面内容。 经过FlameGraph.git处理,最终生成矢量SVG图形, 阅读全文

posted @ 2019-01-04 23:32 ArnoldLu 阅读 (808) 评论 (0) 编辑

导航