
子类__内核入门篇
文章平均质量分 78
RK3399平台入门到精通系列之内核入门篇
内核笔记
一直从业于半导体行业,曾为Linux内核开源文档社区提交过若干文档。
主要从事Linux、Android相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统。
展开
-
RK3399平台开发系列讲解(内核入门篇)1.53、platform平台设备
有两种方法可以把有关设备所需的资源(IRQ、DMA、内存区域、I/O端口、总线)和数据(要传递给驱动程序的任何自定和私有数据结构)通知内核。原创 2022-10-07 22:50:30 · 2797 阅读 · 10 评论 -
RK3399平台开发系列讲解(设备管理篇)Linux 设备管理机制 - 视频介绍
面向对象思想 理解 设备驱动模型原创 2022-08-16 21:36:00 · 1598 阅读 · 7 评论 -
RK3399平台开发系列讲解(内核入门篇)1.52、printk函数分析 - 其函数调用时候会关闭中断
查看linux-source/kernel/printk/printk.c中的源码可知,printk函数调用到log_store函数原创 2022-07-21 14:05:42 · 1465 阅读 · 5 评论 -
RK3399平台开发系列讲解(内核入门篇)1.52、Platform 中 probe函数的调用栈分析
📢我们知道硬件刚起来的时候,bootloader 通过传参让内核选择合适的 dts,kernel 在接收到正确的 dts 时,会将各个合适的 node 进行注册(platform_device_register),并挂在 bus 上,底层驱动进行注册时(platform_driver_register),会先通过遍历 bus 上的 device(bus_for_each_dev),然后通过 dts 中的 compatible 进行匹配(platform_match中执行,dts 匹配只是其中一种匹配方式).原创 2022-06-07 23:30:19 · 1803 阅读 · 6 评论 -
RK3399平台开发系列讲解(内核入门篇)1.51、platform_get_resource 函数实现细节
platform_get_resource 函数实现细节原创 2022-05-31 23:30:00 · 1998 阅读 · 8 评论 -
RK3399平台开发系列讲解(内核入门篇)1.48、LDM数据结构详解
📢要理解linux驱动的设计,首先要理清楚linux驱动最重要的几个数据结构,struct device, struct device_driver, struct bus这些数据结构是理解Linux驱动的关键。原创 2022-04-25 00:43:36 · 2235 阅读 · 9 评论 -
RK3399平台开发系列讲解(内核入门篇)1.47、Platform总线的设计与实现
平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录文章目录一、platform数据结构二、platform总线实现沉淀、分享、成长,让自己和他人都能有所收获!😄一、platform数据结构platform数据结构同样是对device、device_driver、bus数据结构的再封装,我将platform的数据结构列出来如下:二、platform总线实现首先还是将数据结构之间的关系列出来,如下:上图将platfor...原创 2022-04-25 00:33:30 · 1879 阅读 · 7 评论 -
RK3399平台开发系列讲解(内核入门篇)1.46、RTC驱动开发
rtc驱动框架原创 2022-04-16 00:19:59 · 2688 阅读 · 6 评论 -
RK3399平台开发系列讲解(内核入门篇)1.45、什么是RTC?
什么是RTC?原创 2022-04-14 21:43:15 · 2267 阅读 · 6 评论 -
RK3399平台开发系列讲解(内核入门篇)1.44、linux devres
传统的linux driver, 在驱动的probe函数中会进行资源的申请, 一旦初始化的过程中出现error, 就需要释放之前申请的资源, 为此需要使用一堆if语句进行条件判断, 或者使用一堆标签配合goto语句来进行跳转,致使整个probe的代码结构变得异常混乱, 并且driver代码不像linux的core代码, 经过大量的测试, 很多时候, driver的作者都没有考虑driver的出错过程的资源释放, 因此内核会发生因probe失败导致系统崩溃。为了解决这一问题, linux引入了devres原创 2022-04-12 22:36:19 · 3557 阅读 · 7 评论 -
RK3399平台开发系列讲解(CCF子系统)4.41、CCF驱动框架详解
CCF子系统的数据结构分析及代码分析。原创 2022-03-24 23:56:50 · 2062 阅读 · 7 评论 -
RK3399平台开发系列讲解(内核入门篇)1.41、内核通知链
本文介绍内核通知链。它在充电模块应用十分频繁,以至于看充电代码的时候到处都是它的影子。原创 2022-02-06 23:29:06 · 3005 阅读 · 9 评论 -
RK3399平台开发系列讲解(内核入门篇)1.34、什么是系统调用
???? 我们以最常用的系统调用 open,打开一个文件为线索,看看系统调用是怎么实现的。原创 2021-11-28 22:35:07 · 2509 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.29、什么是队列?
队列跟栈一样,也是一种操作受限的线性表数据结构原创 2021-11-13 21:06:02 · 2638 阅读 · 10 评论 -
RK3399平台开发系列讲解(内核入门篇)1.4、如何写代码才能够让CPU执行得更快?
了解 CPU 缓存对性能的影响,便能够更有效地编写我们的代码,优化程序性能。原创 2021-11-07 01:35:13 · 4287 阅读 · 9 评论 -
RK3399平台开发系列讲解(内核入门篇)1.24、系统CPU 性能指标有哪些?
首先,最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。原创 2021-11-01 00:26:02 · 2626 阅读 · 15 评论 -
RK3399平台开发系列讲解(内核入门篇)1.14、Class设备大管家
class主要对系统中的设备进行分类,而该设备类主要是用于将系统中已创建的设备归到各自类型中,而class中各类别主要是对device的链接。原创 2021-10-19 23:27:36 · 8199 阅读 · 9 评论 -
RK3399平台开发系列讲解(内核入门篇)1.40、Docker
RK3399平台开发系列讲解(内核入门篇)1.40、Docker原创 2021-09-12 19:08:00 · 3161 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.39、函数入栈
函数入栈原创 2021-09-12 11:49:40 · 2560 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.37、内核栈
内核栈原创 2021-09-12 11:25:48 · 2757 阅读 · 12 评论 -
RK3399平台开发系列讲解(内核入门篇)1.38、Systemd 系统启动流程
systemd是Linux下的一种init软件,Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容Sys的启动脚本,而且够在进程启动过程中更有效地引导加载服务。在systemd的管理体系里面,以前的运行级别(runlevel)的概念被新的运行目标(target)所取代。tartget的命名类似于multi-user.target等这种形式,比如原来的运行级别3(runlevel3)就对应新的多用户目标(multi-user.target),run level 5就相当于graphica原创 2021-08-21 00:51:40 · 3245 阅读 · 13 评论 -
RK3399平台开发系列讲解(内核入门篇)1.36、Kthreadd线程
Kthreadd线程负责所有内核线程的创建和调度。Kthreadd函数通过遍历kthread_create_list链表,判断是否有新任务加入,调用create_kthread去创建,直到kthread_create_list为空,让出CPU,进入睡眠。所以我们现在关心谁在往这个链表上添加创建线程的任务节点。创建内核线程用的是kthread_create和kthread_run两个接口。kthread_run内部调用kthread_create,区别是它会自动唤醒这个线程进行处理,也就是创建后尽快或立马运原创 2021-08-15 00:35:31 · 2779 阅读 · 10 评论 -
RK3399平台开发系列讲解(内核入门篇)1.35、内核空间布局
在内核空间中存在如下重要的段:vmlinux代码/数据段:任何程序都有TEXT(可执行代码),RW(数据段),ZI段(未初始化数据段),kernel也有,对应的是.text,.data,.bssmodule区域:kernel可以支持ko(模块),因此需要一段空间用于存储代码和数据段。vmalloc区域:kernel除了可以申请连续物理地址的内存外,还可以申请不连续的内存(虚拟地址是连续的),可以避免内存碎片化而申请不到内存。io map区域:留给io寄存器映射的区域,有些版本没有io map区域而原创 2021-08-14 23:52:05 · 2967 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.34、Yocto简介
一、Yocto简介二、Poky目录三、Poky目录树介绍四、文件类型原创 2021-07-31 04:06:16 · 4042 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.28、Priority List(优先级链表)
Priority List (plist) 是用双向链表 (double-linked list) 构建的优先级链表。优先级链表,就是在插入链表时,要考虑链表元素的某个特征值。原创 2018-08-04 15:56:12 · 2172 阅读 · 13 评论 -
RK3399平台开发系列讲解(内核入门篇)1.30、C语言结构体的使用技巧
一、内存对齐二、结构体定义三、访问结构体内的成员四、结构体初始化原创 2017-10-13 16:30:39 · 1682 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.27、Linux中链表的使用与解析
想象一下,有一个驱动程序管理多个设备,假设有5个设备,需要在驱动程序中跟踪每个设备,这就需要链表。链表实际上有两种类型。单链表。双链表。原创 2018-08-21 18:43:53 · 3669 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.26、什么是系统调用
系统调用是应用程序在执行过程中向操作系统内核申请服务的方法,这可能包含硬件相关的服务、新进程的创建和执行以及进程调度,对操作系统稍微有一些了解的人都知道 — 系统调用为用户程序提供了操作系统的接口。原创 2018-08-23 19:25:08 · 1931 阅读 · 9 评论 -
RK3399平台开发系列讲解(内核入门篇)1.25、内核线程的创建
在linux内核中,无论是进程还是线程,都是用struct task_struct结构体来表示的。struct task_struct * kthread_create( int (*threadfn)(void *data), void *data, const char namefmt[]);原创 2018-12-04 18:37:16 · 2337 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.12、设备的添加device_add函数详解
文章目录原创 2020-08-09 15:08:59 · 2291 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.18、 Sysfs设备驱动管理
Linux系统中一切皆文件。设备文件在哪里呢?它在/dev目录下,也在/sys目录下。它们直接有什么区别呢?/dev目录:该目录下面的文件是真实的设备文件,是应用层通过mknod创建的文件,通常系统中是由udev在运行时创建的。我们通常使用open、write、ioctl等函数操作设备,通常就是操作/dev目录下面的文件,它会间接调用到底层的驱动函数。/sys目录:这是由内核在运行时导出的,目的就是通过文件系统展示出设备、驱动和总线等层次关系。这也是这章节的重点。那么先通过下图看一下sysfs文原创 2020-08-07 19:21:09 · 3499 阅读 · 8 评论 -
RK3399平台开发系列讲解(内核入门篇)1.16、设备资源分配和释放
设备资源分配和释放原创 2021-05-02 16:08:16 · 3232 阅读 · 10 评论 -
RK3399平台开发系列讲解(内核入门篇)1.12、platfrom 设备与驱动注册
Platform 驱动注册原创 2021-03-28 00:09:29 · 3700 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核入门篇)1.10、bus_type、device、device_driver结构体的关系
一、数据结构1、bus_type2、device_driver3、device二、总线,驱动和设备的关系原创 2020-12-05 17:25:05 · 3452 阅读 · 10 评论 -
RK3399平台开发系列讲解(内核入门篇)1.20、container_of 获取结构体首地址原理
通过成员变量获取结构体首地址,以便访问其他变量使用原创 2021-03-23 23:02:07 · 2728 阅读 · 10 评论 -
RK3399平台开发系列讲解(内核入门篇)1.23、dump_stack 实现分析
dump_stack(),可以快速帮助开发者理清函数调用流程:原创 2021-02-27 16:13:24 · 2952 阅读 · 12 评论 -
RK3399平台开发系列讲解(内核入门篇)1.7、module_init 的优先级
module_init原创 2021-02-28 14:05:55 · 3858 阅读 · 12 评论 -
RK3399平台开发系列讲解(内核入门篇)1.19、mdev动态更新设备节点及动态挂载U盘
mdev动态更新设备节点及动态挂载U盘原创 2021-02-06 20:58:02 · 4384 阅读 · 13 评论 -
RK3399平台开发系列讲解(内核入门篇)1.32、CPU是如何执行任务的?
我先带你来看下 CPU 的架构,因为你只有理解了 CPU 的架构,你才能更好地理解 CPU是如何执行指令的。原创 2021-07-14 22:03:54 · 3151 阅读 · 10 评论 -
RK3399平台开发系列讲解(内核入门篇)1.15、devres_add添加设备资源
devres_add添加设备资源原创 2021-04-08 23:37:19 · 3291 阅读 · 9 评论