- 博客(1248)
- 资源 (33)
- 收藏
- 关注
原创 RK3399平台入门到精通系列讲解 - 总目录
欢迎大家来到内核笔记的《RK3399平台开发入门到精通系列讲解》,开始前博主先列出RK3399平台学习的大纲,同时这也可以作为大家学习RK3399内核与安卓框架的参考。下面蓝字都是传送门,点击进入即可:...
2020-11-17 23:20:48 85392 202
原创 RK3568 从入门到实战项目专栏目录及介绍
本专栏采用AIO-3568J四核高性能人工智能主板。是四核处理器,集成双核心架构GPU以及高效能NPU;支持8G大内存;板载M.2与SATA3.0接口;支持POE+供电;支持WiFi 6,5G/4G无线网络通讯;拥有丰富的扩展接口,可应用于智能NVR、云终端、物联网网关、工业控制等场景。
2018-01-30 20:05:13 25551 45
原创 RK3568平台开发系列讲解(基础篇)互斥锁的实现
互斥锁会导致休眠, 所以在中断里面不能用互斥锁。mutex的操作函数中有fastpath、slowpath两条路径(快速、慢速):如果fastpath成功,就不必使用slowpath。atomic_long_try_cmpxchg_acquire(mem, old, new)是一个封装的原子操作。如果mutex当前值是0或负数,则需要调用__mutex_lock_slowpath慢慢处理:可能会休眠等待。大部分情况下,mutex当前值都是1,所以通过fastpath函数可以非常快速地获得mutex。
2024-03-18 00:01:05 9
原创 RK3568平台开发系列讲解(pinctrl篇)什么是 pinctrl子系统
Linux 中的 pinctrl 子系统(Pin Control Subsystem) 是一个用于管理和配置通用输入/输出(GPIO) 引脚的框架。 它提供了一种标准化的方法, 以在 Linux 内核中对 GPIO 引脚进行配置、分配和控制, 从而适应不同的硬件平台和设备。
2024-03-16 01:07:54 33
原创 RK3568平台开发系列讲解(基础篇)内核是如何发送事件到用户空间
kobject_uevent 是 Linux 内核中的一个函数, 用于生成和发送 uevent 事件。 它是 udev 和其他设备管理工具与内核通信的一种方式。
2024-03-16 00:26:34 257
原创 RK3568平台开发系列讲解(基础篇)自旋锁的实现
上述__raw_tickets结构体中有owner、next两个成员,这是在SMP系统中实现spinlock的关键。
2024-03-08 00:29:10 48
原创 RK3568平台开发系列讲解(基础篇)设备号的分配和释放
字符设备在/dev目录下,不能简单地把它们当作普通文件。字符设备文件的类型是可以识别的,用ls -l命令能够查看。主设备号和次设备号标识设备,并将其与驱动程序进行绑定。下面列出/dev目录(ls -l /dev)的内容,让我们看一看其工作原理:
2024-03-06 23:52:35 196
原创 RK3568平台开发系列讲解(基础篇)字符设备驱动关键结构体
Linux 内核中将字符设备抽象成一个具体的数据结构 (struct cdev), 我们可以理解为字符设备对象,cdev 记录了字符设备的相关信息 (设备号、内核对象),字符设备的打开、读写、关闭等操作接口(file_operations),在我们想要添加一个字符设备时,就是将这个对象注册到内核中,通过创建一个文件 (设备节点) 绑定对象的 cdev,当我们对这个文件进行读写操作时,就可以通过虚拟文件系统,在内核中找到这个对象及其操作接口,从而控制设备。
2024-03-06 00:37:22 96
原创 RK3568平台开发系列讲解(基础篇)内核错误码
在 Linux 内核中,所谓的错误指针已经指向了内核空间的最后一页,例如,对于一个 64 位系统来说,内核空间最后地址为 0xffffffffffffffff,那么最后一页的地址是 0xfffffffffffff000~0xffffffffffffffff,这段地址是被保留的,如果指针落在这段地址之内,说明是错误的无效指针。沉淀、分享、成长,让自己和他人都能有所收获!
2024-03-03 23:36:18 42
原创 RK3568平台开发系列讲解(基础篇)中断线程化
中断线程化是一种优化技术, 用于提高多线程程序的性能。中断线程化的核心思想是将中断处理和主线程的工作分开, 让它们可以并行执行。中断线程负责处理中断事件, 而主线程负责执行主要的工作任务。这样一来, 不仅可以减少切换的开销, 还可以提高整个程序的响应速度和性能。需要注意的是, 中断线程化还需要处理线程之间的同步和数据共享问题。因为中断线程和主线程可能会同时访问和修改共享的数据, 所以需要合理地进行同步操作, 确保数据的一致性和正确性。
2024-03-03 23:29:06 37
原创 RK3568平台开发系列讲解(基础篇)文件私有数据
Linux 中并没有明确规定要使用文件私有数据,但是在 linux 驱动源码中,广泛使用了文件私有数据,这是 Linux 驱动遵循的“潜规则”,实际上也体现了 Linux 面向对象的思想。struct file 结构体中专门为用户留了一个域用于定义私有数据。
2024-03-01 04:00:00 61
原创 RK3568平台开发系列讲解(基础篇)原子操作
在 Linux 内核中的原子操作可以理解为“不可被拆分的操作”,就是不能被更高等级中断抢夺优先的操作。在 C语言中可以使用以下代码对一个整形变量赋值。
2024-02-29 23:31:01 526
原创 RK3568平台开发系列讲解(基础篇)如何快速学习一套 Linux开发板源码
拿到一份源码和一块评估板,如何快速找到与这块板相关的源码,是很多研发人员都曾遇到过的问题。如果对内核源码结构有大概了解,要完成这些事情也不难,通常可按照基础代码、驱动代码和其它代码等方面来梳理。
2024-02-27 00:43:14 210
原创 RK3568平台开发系列讲解(Linux系统篇)内核设备与驱动程序的匹配
内核中负责平台设备和驱动程序匹配功能的函数在 /drivers/base/platform.c 中
2024-02-25 23:24:43 71
原创 RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:分配和注册字符设备
字符设备在内核中表示为struct cdev的实例。在编写字符设备驱动程序时,目标是最终创建并注册与struct file_operations关联的结构实例,为用户空间提供一组可以在该设备上执行的操作(函数)。
2024-02-25 22:59:01 69 1
原创 RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:主设备和次设备
字符设备通过字符(一个接一个的字符)以流方式向用户程序传递数据,就像串行端口那样。字符设备驱动通过/dev目录下的特殊文件公开设备的属性和功能,通过这个文件可以在设备和用户应用程序之间交换数据,也可以通过它来控制实际的物理设备。这也是Linux的基本概念,一切皆文件。字符设备驱动程序是内核源码中最基本的设备驱动程序。
2024-02-25 22:51:59 67
原创 RK3568平台开发系列讲解(Linux系统篇)SPI 客户端通信
SPI I/O模型由一组队列消息组成。我们提交一个或多个struct spi_message结构时,这些结构以同步或异步方式处理完成。单个消息由一个或多个struct spi_transfer对象组成,每个对象代表全双工SPI传输。这是驱动程序和设备之间交换数据的两个主要结构。它们都定义在include/linux/spi/spi.h中
2024-02-24 00:08:50 131
原创 RK3568平台开发系列讲解(Linux系统篇)编写I2C客户端驱动程序
配置I2C设备基本上分为两个步骤。定义并注册I2C驱动程序定义并注册I2C设备
2024-02-22 20:06:14 67 1
原创 百面嵌入式专栏(经验篇)如何在面试中介绍自己的项目经验
在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是,说下你最近的(或最拿得出手的)一个项目。
2024-02-22 19:29:23 134
原创 RK3568平台开发系列讲解(Linux系统篇)通过I2C总线访问客户端方法
串行总线事务只是访问寄存器来设置/获取其内容。I2C遵循该规则。I2C内核提供两种API,一种用于普通I2C通信,另一种用于兼容SMBUS的设备,它也适用于I2C设备,反之则不然。
2024-02-22 19:22:48 61 1
原创 RK3568平台开发系列讲解(Linux系统篇)内核错误码介绍
错误代码由内核或用户空间应用程序(通过errno变量)解释。错误处理在软件开发中非常重要,而不仅仅是在内核开发中。幸运的是,内核提供的几种错误,几乎涵盖了可能会遇到的所有错误,有时需要把它们打印出来以帮助进行调试。
2024-02-22 00:51:30 480 1
原创 RK3568平台开发系列讲解(Linux系统篇)container_of
在代码中管理多个数据结构时,几乎总是需要将一个结构嵌入另一个结构中,并随时检索它们,而不关心有关内存偏移或边界的问题。
2024-02-21 00:39:59 167
原创 RK3568平台开发系列讲解(Linux系统篇)内核链表的使用
📢内核开发者选择实现循环双链表的决定可能是出于多方面的考虑。循环双链表是一种非常灵活的数据结构,可以支持FIFO(先进先出)和LIFO(后进先出)的操作,同时其实现相对简单,因此在内核开发中被广泛采用。通过使用循环双链表,内核开发者可以在保持代码量最小的情况下实现多种数据结构和算法,从而提高了内核的性能和可维护性。此外,循环双链表还具有高效地插入和删除节点的优点,这在内核开发中非常重要,因为内核需要频繁地对数据结构进行修改和操作。总的来说,选择实现循环双链表是一种权衡取舍,内核开发者在保持代码简洁
2024-02-21 00:25:03 407 3
原创 RK3568平台开发系列讲解(Linux系统篇)内核中断机制
📢中断是设备中止内核的一种方法,告诉内核发生了有趣或重要的事情。这些在Linux系统上被称作IRQ。中断的主要优点是避免对设备的轮询,由设备上报自身状态的改变,而不是由内核去轮询设备状态。
2024-02-19 23:27:13 441
原创 RK3588平台开发系列讲解(视频篇)ffmpeg 的移植
📢ffmpeg 是一种多媒体音视频处理工具,具备视频采集功能、视频抓取图像、视频格式转换、给视频加水印并能将视频转化为流等诸多强大的功能。它采用 LGPL 或 GPL 许可证,是一种开源程序。
2024-02-19 19:31:19 699 1
RK3399 Android7.1-Box 软件开发指南 V1.01-20170401.rar
2021-06-04
ioremap_gpio_demo.c
2021-02-26
rkisp的驱动代码
2020-10-21
MLX90640红外开发资料包.zip
2020-02-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人