
Linux
文章平均质量分 79
gbmaotai
这个作者很懒,什么都没留下…
展开
-
lowmemorykiller&eventfd&cgroup
eventfd包含一个由内核维护的64位无符号整型计数器,创建eventfd时会返回一个文件描述符,进程可以通过对这个文件描述符进行read/write来读取/改变计数器的值用途线程或者父子进程间通信,是一种事件通知方式内核通过eventfd也可以向用户空间进程发消息,cgroup就是通过这种方式通知的MEMCG_SYSFS_PATH “cgroup.event_control” ...原创 2019-12-31 15:56:15 · 215 阅读 · 0 评论 -
伪终端
伪终端设备PTMpseudoterminal master/dev/ptmxPTSpseudoterminal slave/dev/pts/numdevpts文件系统,挂载在/dev /pts目录devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)1.当...原创 2019-12-27 11:45:10 · 513 阅读 · 0 评论 -
ext4fs
EXT4ext4 filesystem把磁盘分成一系列block groups,每一个group都有很多blocks.block_sizesuperblock中sb.sb.s_log_block_size 记载 (s_log_block_size 0=1K ,1=2K,2=4K)sb.sb.s_log_block_size默认值 =2 , 2 ^ (10 + sb.s_log_blo...原创 2019-12-26 11:31:02 · 1351 阅读 · 0 评论 -
gtest
gtest C++单元测试框架,由google公司发布。断言//bool值检查//期待结果是trueASSERT_TRUE(XX)//期待结果是falseASSERT_FALSE(XX)//数值型数据检查//期待结果X1=X2ASSERT_EQ(X1,X2),//期待结果X1!=X2ASSERT_NE(X1,X2)//less than <ASSERT_LT(X1,...原创 2019-12-25 11:30:23 · 137 阅读 · 0 评论 -
Daemon进程
进程描述符struct task_struct { ... struct fs_struct *fs; //文件系统信息 struct files_struct *files; // 打开的文件 ...} 文件描述符表/* * Open file table structure */ #define NR_OPEN_DEFAULT BITS_PER_LO...原创 2019-12-24 11:09:37 · 255 阅读 · 0 评论 -
uevent & netlink(KOBJECT_UEVENT)
uevent/android/system/core/libcutils/uevent.cuevent 是通过netlink socket发送消息给用户进程android/system/extras/tests/uevents ./uevents change@/devices/platform/disp ACTIO...原创 2019-12-19 11:45:51 · 3638 阅读 · 0 评论 -
netlink
Netlink内核和用户层通信的方式在内核态主动发起消息,而用户态的程序可以阻塞等待消息。自己独立的地址编码 struct sockaddr_nl { sa_family_t nl_family; //AF_NETLINK, PF_NETLINK unsigned short nl_pad; ...原创 2019-12-19 11:44:46 · 232 阅读 · 0 评论 -
Multi-Processing
手动分配CPU核taskset -p f 1574 pid 1574's current affinity mask: 5pid 1574's new affinity mask: ftaskset -c busybox 不支持cat /proc/cpuinfoProcessor : ARMv7 Processor rev ...原创 2019-12-09 11:03:04 · 601 阅读 · 0 评论 -
ARM系列
类别ARM Cortex系列处理器核包括Cortex-A系列(高性能,具备MMU,可以运行如Linux、Android等操作系统)、Cortex-R系列(高端嵌入式满足高性能高可靠性的实时需求)、Cortex-M(嵌入式单片机,低功耗,低成本)。内核Cortex A5Cortex A7Cortex A8Cortex A9Cortex A15Cortex A17发...原创 2018-12-27 16:03:56 · 1141 阅读 · 0 评论 -
GCC 的一些特性
字符串的表示形式gcc支持的一种的字符串的表示形式“xxx” “xxx” “xxx”会将这3个字符串连成一个并 且只会在最后的一个字符串末尾添加 ‘\0’,而且还会忽略各个字符串之间的空格符号。attribute_attribute__实际上是gcc专有的一种语法,是用来设置设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类...原创 2018-11-16 14:18:16 · 1699 阅读 · 0 评论 -
虚拟文件系统sysfs & proc
PROC最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。 entry = create_proc_entry(XXX_DEVICE_PROC_NAME, 0, NULL); if(entry) { entry->own...原创 2018-10-22 16:28:41 · 462 阅读 · 0 评论 -
kernel list_head 双向链表
struct list_head { struct list_head *next, *prev;};#define LIST_HEAD_INIT(name) { &amp;(name), &amp;(name) }//初始化next , prev 指向自己#define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INI...原创 2018-09-19 11:43:31 · 254 阅读 · 0 评论 -
内核启动流程
内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。start_kernel函数从start_kernel函数开始,内核即进入了C语言部分,它完成了内核的大部分初始化工作。实...原创 2018-09-03 14:38:52 · 364 阅读 · 0 评论 -
内核定时器
定时器的使用1、定义定时器结构体timer_list。2、设置超时时间,定义定时器处理函数和传参。3、激活定时器。1、定义并初始化定时器结构体timer_list。/*include/linux/timer.h*/struct timer_list {struct list_head entry;unsigned long expires; //设置在执行定时器处...原创 2018-09-03 10:16:54 · 906 阅读 · 0 评论 -
Audio Codec
在移动设备中,Codec的作用可以归结为4种,分别是:1.对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号2.对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号3.对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的4.对音频信号做出相应...原创 2018-08-30 16:57:40 · 6827 阅读 · 0 评论 -
信号
信号种类信号是一种软件层面上对中断的模拟,而这种软件模拟的信号或者说中断的产生,有三大类:1. 外部信号。用户在终端 按下某些键时,终端驱动程序会发送信号给前台进程,例如Ctrl-C 产生 SIGINT 信 号, Ctrl-\ 产生 SIGQUIT 信号, Ctrl-Z 产生 SIGTSTP 信号。2. 硬件异常产生的信号。这些条件由硬件检测到并通知内核,然后内核向...原创 2018-08-23 17:28:31 · 152 阅读 · 0 评论 -
Linux输入子系统
驱动程序1. 申请设备,设置input设备支持的事件类型(比如EV_ABS,EV_KEY)input_allocate_device函数分配了一个 input_dev 结构体 button_dev = input_allocate_device(); button_dev->evbit[0] = BIT_MASK(EV_KE...原创 2018-08-23 18:07:58 · 198 阅读 · 0 评论 -
总线驱动设备
Linux设备模型使用了三个数据结构分别来描述总线、设备和驱动。所有的设备和对应的驱动都必须挂载在某一个总线上,通过总线,可以绑定设备和驱动。 这个属于分离的思想,将设备和驱动分开管理。1、bus 总线总线是处理器和设备之间的通道。总线有多种类型,每种总线可以挂载多个设备。 在设备模型中,所有的设备都通过总线相连,以总线来管理设备和驱动函数。总线有bus_type结构表示。...原创 2018-08-24 10:34:03 · 1892 阅读 · 0 评论 -
Linux I2C体系
I2C总线仅仅使用 SCL 、 SDA 两根信号线就实现了设备之间的数据交互。由于各种SOC都有自己的I2C总线,为了上层能统一接口,采用这种三层I2C架构.I2C总线驱动主要实现了适用于特定I2C控制器的总线读写方法,并注册到Linux内核的I2C架构,I2C外设就可以通过I2C架构完成设备和总线的适配。但是总线驱动本身并不会进行任何的通讯,它只是提供通讯的实现,等待设备驱动来调用其函数...原创 2018-08-28 16:43:55 · 205 阅读 · 0 评论 -
platform 设备
platform_device并不是与字符设备、块设备并列的概念,而是Linux系统提供的一种管理设备的手段,所有SOC系统中集成的独立的外设控制器、挂接在SOC内存空间的外设等都属Platform设备。如把内部集成的I2C、PTC、SPI、LCD、看门狗控制器都归纳为Platform设备,而这些设备本身就是字符设备。由此可见Platform中的设备是不分字符设备还是块设备。 bus ...原创 2018-08-24 15:11:29 · 517 阅读 · 0 评论 -
中断
中断的上下半部处理机制上半部是不能中断的,对于实时要求高的,必须放在上半部。上半部的功能是响应中断。当中断发生时,它就把设备驱动程序中中断处理例程的下半部挂到设备的下半部执行队列中去,然后继续等待新的中断到来。这样一来, 上半部的执行速度就会很快,它就可以接受更多它负责的设备所产生的中断了。上半部之所以快,是因为它是完全屏蔽中断的,如果它没有执行完,其他中断就不能 及时地处理,只能...原创 2018-08-24 17:17:04 · 259 阅读 · 0 评论 -
udev&misc
动态创建设备节点——udev之前加载字符型设备后是通过命令mknod来创建设备节点的。在2.6内核中,有一个名叫udev的后台程序,它通过读取/sys/class的信息,一旦添加的新的设备,该后台程序就会自动创建设备节点。 一、要使用动态创建设备节点,首先要运行udev后台程序。mount -t tmpfs tmpfs /dev/sbin/udevd -d/sbin/udevst...原创 2018-09-04 10:17:07 · 185 阅读 · 0 评论 -
等待队列
工作队列和等待队列的区别1.work queue是一种bottom half,中断处理的后半程,强调的是动态的概念,即work是重点,而queue是其次。create_singlethread_workqueuequeue_work2.wait queue是一种「任务队列」,可以把一些进程放在上面睡眠等待某个事件,强调静态多一些,重点在queue上,即它就是一个q...原创 2018-09-04 14:37:57 · 281 阅读 · 0 评论 -
内存文件系统
ramdiskLinux内核2.0/2.2就已经支持,为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两个选项,一个是设定Ramdisk的大小,默认是4096k;首先查看一下可用的RamDisk,使用ls /dev/ram*首先创建一个目录,比如test,运行mkdir /mnt/test;然后对/dev/ram0 格式...原创 2018-09-04 17:35:31 · 4871 阅读 · 0 评论 -
内存
1、Linux内存页管理Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成4K大小页,作为使分配和回收内存的基本单位。在分配内存时尽量分配连续内存,避免TLB的刷新率过高。故此Linux采用了“伙伴“关系来管理空闲页框。因此空闲页面分配时也需要遵循伙伴关系。最小单位是2的幂倍页面大小。内核中分配空闲页框的基本函数是get_free_page/get_free_pages,他们或...原创 2018-08-27 14:36:32 · 355 阅读 · 0 评论