自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序猿Ricky的日常干货

学而不思则罔,思而不学则殆! (xiehaocheng127@163.com)

  • 博客(14)
  • 资源 (4)
  • 收藏
  • 关注

原创 gcc支持的C语言标准(-std选项)

gcc支持多种版本的C标准,比如C90(ISO1990)、C99(ISO 1999)和C11(ISO2011),除此之外,GCC还会支持一些GCC特有的扩展。分别是:gnu89/gnu90: ISO C90 + GCC extensiongnu99: ISO C99 + GCC extensiongnu11: ISO C11 + GCC extension支持的C语言标准可以使用-s...

2019-07-15 15:11:32 12725

原创 ftrace在实际问题中的应用

我在自己的其他博文中有介绍ftrace的介绍和使用方法,那么在实际的工作中,ftrace可以用来做什么呢?在实际问题场景中ftrace主要用来跟踪延时和调用流程,分析性能问题。function/function_graph 分析内核函数调用流程function/function_graph是利用的GCC的编译选项来完成对函数的插桩的,ftrace自带的function tracer和fun...

2019-07-08 18:12:27 2704

原创 bootloader启动参数传递(二)

1.dtb是怎么传递给kernel的?首先base dtb是与kernel一起打包进boot.img中的,dtbo是一个单独分区存储,bootloader加载后整合后传递给kernel。通过把地址赋值给对应的寄存器,从而让内核知道对应的dtb信息的,对于arm32,是r2寄存器;对于arm64,是x0寄存器。2.ramdisk信息是怎么传递给kernel的?ramdisk可以打包到kern...

2019-07-30 17:00:17 1813

原创 Linux应用层时间和定时器

时间Linuxtime_t time(time_t *ptr);int gettimeofday(struct timeval *restrict tp, struct timezone *gz); int settimeofday(const struct timeval *tv, const struct timezone *gz);posix#include ...

2019-07-30 11:50:28 397

原创 Linux内核如何区分匿名页映射?

page结构体关键成员内核中使用page结构体来描述物理内存,每个物理页就对应一个page结构体来描述,所以page结构体占用的内存大小是与系统物理内存大小成正比的。物理内存越大,用于描述物理页的page结构体就越多,占用的内存也就越大,因此为了减少内存的占用,page结构体大量使用了union联合体结构。如下我们只列举了本文下面要讲述的一些page成员。include/linux/mm_ty...

2019-07-29 11:44:30 1690

原创 Linux内核中使用的数据结构和算法

Radix Tree(基树)在页缓存管理中的使用:页缓存管理中会使用到基树,address_space结构体中包含一个radix tree基树成员,因为每次内核在进行I/O操作前都会检索页高速缓存,也就是address_space结构体,为了提高检索效率,采用基树来管理和检索页高速缓存,会极大提高效率。在2.6以前的内核版本中,页缓存并不是通过基树来检索,而是通过维护一个全局散列表进行检索,...

2019-07-26 17:32:06 560

原创 Linux/Android perf

perf介绍perf是Linux系统中的性能调试工具,它是一个应用层的工具,但是会从kernel的文件节点获取信息,它的源代码存放在kernel中的tools/perf目录,它在编译的时候会使用到内核代码的头文件,所以不同版本的内核一般都要使用对应版本的perf工具。虽然它的代码存在于内核目录中,但是在编译内核时并不会主动编译perf工具,如果要编译需要进入到tools/perf目录中执行mak...

2019-07-26 15:49:51 6665

原创 常用的两种hash算法

string hash算法/* * A simple string hash algorithm * * (Java is using the same algorithm) * * */unsigned int string_hash_calculate(char *key){ char *p = key; unsigned int h = 0; ...

2019-07-25 11:32:14 430

原创 内核中的Per CPU数据使用注意事项

实际上是按照cpu个数创建的一个数组,每个CPU访问自己的数组成员,所以不用持锁,但是会有一个问题需要考虑,就是内核抢占问题:1.一个访问每个CPU数据的任务,可能会被调度在不同的CPU上运行,此时对应的数组成员就不同的2.另一个任务抢占了当前任务在当前CPU上运行,如果两个任务都访问当前CPU的数据,那么可能发生问题鉴于以上问题,在每次操作每个CPU数据时,需要在操作前禁止掉抢占,操作后打...

2019-07-24 09:14:44 488

原创 Linux块设备驱动开发简介

本文基于Linux-4.14文件系统框架Linux内核的文件系统框架图如下所示:gendisk对象Linux中用一个gendisk对象结构体表示一个磁盘分区,这个结构体对象中会包含该分区对应的设备文件的主设备号,次设备号,以及对应的gendisk->fops操作函数,这个块设备操作方法结构体如下所示:struct block_device_operations { int...

2019-07-19 17:51:07 1356

原创 Linux ps命令简介

Linux ps命令支持多种方式的options选项:UNIX选项要求必须在选项前加上“-”。 比如: ps -e #打印全部进程信息 ps -ef #以全信息格式打印全部进程信息输出格式如下:$ ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 7月15 ? ...

2019-07-16 15:29:01 1074

原创 Linux 内核console设备实现详解

本文基于Linux-4.141.earlyconearly console,顾名思义,他表示的就是早期的console设备,主要用于在系统启动阶段的内核打印的输出,由于linux内核实际设备驱动模型还没有加载完成,所以早期的启动信息需要一个特殊的console用于输出log。在系统初始化时通过cmdline参数来解析,代码如下:./init/main.c:static int __i...

2019-07-11 15:32:15 7653 3

原创 RT Preempt Linux简介

RTOS (实时操作系统)什么是实时操作系统?实时操作系统要求在一个触发信号到来之后能够在一个确定的时间点之前进行响应处理。它与普通的非实时操作系统区别在于:普通操作系统的响应延时受系统负载影响较大,轻负载时可能会满足响应的要求,但是在负载变大的时候响应会变慢,并且这个响应时间是不确定的。因此一个足够快的系统不代表是一个实时操作系统,实时系统必须要求在负载变化的情况下依然能够满足确定的响应...

2019-07-03 11:59:57 10048

原创 二叉树的遍历方式

二叉树,每个根节点有1个左节点和1个右节点遍历方式有3种:前序遍历(先根遍历)a. 访问根节点b. 访问左子树c. 访问右子树中序遍历(中根遍历)a. 访问左子树b. 访问根节点c. 访问右子树后序遍历(后根遍历)a. 访问左子树b. 访问右子树c. 访问根节点举例说明如下: A / \ B ...

2019-07-01 20:36:01 1419

linux gtk hello test

gtk hello world,test for gtk lib

2016-01-14

linux v4l2 camera config

linux v4l2 camera config

2016-01-14

v4l2 camera capture and config

linux系统下的camera capture和camera config实例

2015-08-17

linux v4l2 camera capture

v4l2接口,camera capture实例,合法合规!

2003-07-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除