自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 rk3588 双HDMI冲突问题与HDMI不能热插拔问题

rk3588在开发时现在发现只能在插入HDMI时上电才能输出信号,而当开机之后,再插入HDMI显示器则无信号。

2023-07-23 15:22:44 1810

原创 rockchip linux Vendor storage 及SN添加

在产品开发过程中,最后都会为产品编辑一个产品编号方便于管理和维护,而(Series Number)就是用于产品的生产编号。但是在linux中,并没有专门管理串码的驱动。

2023-07-16 23:20:42 806

原创 linux 基于debian_ubuntu AB系统适配(四)- 硬盘 wifi U盘无法使用问题

使用原系统可以使用,但AB系统缺不行,开始怀疑是文件系统问题,于是我把AB系统的文件系统给替换到原系统中去,结果一样可以使用。于是替换了内核文件,结果不能使用了,那问题就出现在了内核中,刚开始以为是设备树的问题,于是拿原系统的设备树与AB系统的设备树比较,并没有什么大的不同,然后又拿config文件做比较,也没有什么大的不同。然后想到了原系统使用的是extboot,有些驱动会以模块的方式加载,于是我在原系统中使用lsmod查看安装的模块module 为模块名称Size 模块为大小。

2023-07-13 23:38:40 859 1

原创 linux 基于debian_ubuntu AB系统适配(三)- overlayroot

通过三章把基于linux Debian下的A/B系统移植大致描述了一下,主要修改的地方是uboot、kernel、roofs,A/B系统的原理很简单,主要是镜像的分离打包和开机后的一些处理。

2023-07-13 23:30:04 2514

原创 linux 基于debian/ubuntu AB系统适配(三)- overlayroot

通过三章把基于linux Debian下的A/B系统移植大致描述了一下,主要修改的地方是uboot、kernel、roofs,A/B系统的原理很简单,主要是镜像的分离打包和开机后的一些处理。

2023-03-30 15:29:47 1398 1

原创 ARM -- 栈

栈其实就是一种数据结构,在ARM中所有的寄存器出入栈都是代码行为,当然C语言是没有这种行为,是编译器帮我们添加进去的,内核除了帮我们把返回地址写入LR寄存器以外不会有其它“自动”行为。

2023-03-27 09:33:40 320

原创 linux 启动文件夹-init.d

当kernel被BootLoader引导起来后,就进行一系列的初始化动作,当初始化所有的设备驱动程序和数据结构完毕后,第一件事会去调用init的程序,去完成引导流程。所以init进程是第一个进城,编号始终为1。init进程启动后会首先去读取**/etc/inittabinitdefault id**值,这个值决定了系统的启动级别,决定需要运行/etc/下哪一个rcX.d文件。,具有不同的功能。值得注意的是,在debian和Ubuntu下并没有这个文件,他们有自己的处理方式。

2023-03-14 15:04:16 1426

原创 linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

2023-03-12 13:04:36 549

原创 linux 基于debian/ubuntu AB系统适配(一)-sdk编译配置

kernel+resource+ramdisk **组成,但在升级时需要重启进入recovery分区去执行升级操作。是在设备上存在于两个相同的分区,设备会只在其中一个slot(分区)上启动,如果当前slot分区启动失败累积到一定的次数则会去启动另一个分区。在升级时不需要重启,升级完成后再重启进入到升级后的分区中去。

2023-03-09 16:35:29 429

原创 Debian deb文件打包及例程

deb包是Debian,Ubuntu等Linux发行版的软件安装包,扩展名为.deb.。它类似于tar,把一堆的散装文件打包成一个整体,不同的是,deb需要有DEBIAN文件夹,里面包含了一些版本文件、安装前后所需要执行的一些脚本文件和版权等信息。需要注意的是打包deb并不负责编译

2023-03-05 23:30:00 2212

原创 rockchip Debian 编译报错

在编译Debian时,报错,如下。

2023-02-24 23:52:58 1970 1

原创 android 11 移除桌面搜索栏

【代码】android 11 移除桌面搜索栏。

2023-02-06 23:21:04 279

原创 rk3566 android 11 永久隐藏状态栏

隐藏状态栏

2023-02-06 23:16:52 287

原创 rk3566 Android 预置三方应用

Android.mk文件是描述源文件在构建系统的作用,更具体来说:是告诉系统该怎么编译,类似于内核Makefile文件;

2023-02-05 19:19:56 503

原创 android中设置 版本号

在设置中的关于设备中修改版本号。

2023-02-05 19:07:34 751

原创 同时挂载二维码模块与4G模块时,导致4G模块连不上网都是USB设备)

USB 实施者论坛组织已经描述了符合通信设备类 (CDC) 的设备应如何将自己呈现给 USB 主机。USB 实现者论坛还指定了 CDC 子类应如何操作,包括那些旨在通过公共交换电话网络 (PSTN) 相互通信的设备。这些被称为调制解调器,因为数据在发送端经过调制操作,将比特转换为可以通过电话线传输的模拟信号,然后通过接收端的解调操作将模拟信号转换回原始位。要与调制解调器讨论,主机 USB 驱动程序必须使用现有控制模型之一。

2022-10-23 10:42:03 1018

原创 linux驱动 -- touch screen

touch驱动从结构来说其实很简单,就是i2c,irq,input的结合体,如果需要更升入的了解就需要多去看看相关芯片的源码。

2022-09-23 10:56:09 697

原创 中断线程化

中断线程化以后中断将作为内核线程运行,而且也可以被赋予不同的优先级,任务的优先级可能比中断线程的优先级高,这样做的目的就是保证高优先级的任务能被优先处理。要注意,并不是所有的中断都可以被线程化,重要的中断就不能这么操作。

2022-09-20 22:14:25 693

原创 docker 镜像原理

是一个分层文件系统。

2022-09-18 21:14:03 301

原创 docker 容器的数据卷

数据卷是宿主机中的一个目录或者文件,当容器目录挂载了宿主机的目录之后,这样就成为了一个数据卷,两边的文件就会同步。

2022-09-17 09:18:05 323

原创 docker 命令

从Docker仓库下载镜像到本地,镜像名称格式为名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub搜索对应镜像查看。如果容器是运行状态则删除失败,需要停止容器才能删除。删除镜像前需要先删除容器,否则会删除失败。从网络中查找需要的镜像。

2022-09-15 18:01:47 84

原创 docker 安装与环境搭建

安装 Docker。

2022-09-14 20:36:15 143

原创 Linux 驱动 – Backlight 驱动

Backlight驱动其实很简单,在框架的基础上去实现必要的函数之后,就能很轻易的使用它。这种代码风格也值得我们的借鉴。Backlight驱动其实很简单,在框架的基础上去实现必要的函数之后,就能很轻易的使用它。这种代码风格也值得我们的借鉴。

2022-09-14 01:36:29 1055

原创 Linux字符设备驱动–SPI LCD驱动

在中介绍了的驱动,本章会介绍如何从零开始写一个LCD驱动,我手上的是接口的驱动,在中,有一个专门为接口设立的子驱动(TFT),但本章并没有使用驱动来完成该程序,而是直接使用驱动来完成。本次使用的是驱动芯片,屏幕大小是1.3寸,240*240的屏幕,十几块钱一个,我们会用到的数据线有四根,分别是、两个数据传输线,复位线,数据与命令切换线。百度上该资料的屏幕很多,可以自行去查看,本章着重讲如何去写一个的驱动。屏幕采用的是总线,加上和线,所以我们需要一个的驱动框架打底,这是一切的基础。驱动会去设备树中寻找匹配设

2022-09-07 14:15:03 1025

原创 Linux 驱动 – Frame Buffer (帧缓冲)显示驱动

info`结构体。总的来说,Frame Buffer的驱动还是很简单的,与misc驱动一样,都是通过主设备号的file_fops方法去控制下面的子设备。一般来说驱动都是芯片厂家写好了的,我们只需要去配置参数就可以了,但对于入这一行的人来说,也需要去了解驱动的原理,遇事则不慌。至于驱动的实现则放在我另一个专栏里,欢迎大家去看并指正。......

2022-08-03 11:45:33 1684

原创 Linux驱动 – 设备号

在linux驱动中,有很多应用此方法的地方,fb,iic,spi,misc等都是使用的此方法来管理设备,这样的好处就是能节省主设备号的消耗,能分类管理设备。httpshttpshttpshttpshttpshttpshttps。

2022-07-28 18:15:18 662

原创 Linux字符设备驱动–DHT11

通过波形图我们可以知道,当主机发出起始信号后,从机不论发出的0还是1,一共会发出41个波形,从中我们就可以提取出相应的特征–他们都是从下降沿开始,到下一个下降沿为结束。可以拿这段时间的长短来作为判断0和1的依据。在本章中我们使用了platform,iio等方法来完成这个驱动,也使用了中断来避免使用延时来判断信号,大大的提高了工作效率。return0;}{},};},};#四、总结httpshttpshttpshttpshttpshttps。...

2022-07-24 00:12:47 1079

原创 从零开始搭建repo 与使用

其实repo的搭建并不复杂,服务端只需要建立一个仓库即可,而客户端就安装repo工具,对服务器和原项目不需要有多大的改动。原理也很简单,其实就像一个shell脚本,通过.xml文件里的指引,把remote的fetch与project的name组合起来就是一个仓库的链接,然后通过该链接去下载对应的仓库而已。当然,repo还有其他的功能如使用linkfile可以在同步完成后创建链接,还有其他功能,这些就有待读者去发掘了。ject的name组合起来就是一个仓库的链接,然后通过该链接去下载对应的仓库而已。...

2022-07-23 10:09:12 3936 3

原创 linux字符设备驱动–led驱动

在嵌入式行业中,很多的开发人员主要的开发旋律就是拿开源,厂家的代码来完成产品的功能,然后在此基础上提升去产品的性能,修改定制的需求,然后一搞就是好几年。这对一个公司来说确实没有问题,因为需要保证项目的的开发进度和代码的可靠性,但这对一个码农来说却不是一件好事,这会让我们去忘记、忽略一些基础的技能,导致员工没有进步的空间,一直停留在原地。针对当前的现状,想从基础的开始一步一步来帮助初学者来学习Linux和巩固自己的基础,当然自己的能力也有限,有一些观点只代表了自己的所想,这也是博主第一次写教程,有错误的地方也

2022-07-13 18:37:18 138

原创 内存管理 -- 快表 TLB (Translation Look-aside Buffers)

因为虚拟内存的存在,它最终还是要去访问物理内存,中间就需要通过映射,来达到获取内存中数据的目的。而映射就需要建立虚拟内存与物理内存的关系,这就有了页表的存在。页表存在于进程的内存之中,收到虚拟地址之后查询来获取物理地址。处理器把虚拟地址给到,然后通过查表的方法找到与虚拟地址对应的物理地址。此时问题就出现了,如果只有一级的页表查找速度是会非常快,但会占去很大一部分内存,如:对于4GB的虚拟地址且大小为4KB页,一级页表将有2^20个表项,页表占有连续内存并且存储空间大多级页表把需要的用到的页复制到内存中

2022-07-08 09:39:14 4846

原创 linux内存管理 -- Slab

碎片即一个完整的东西被打碎,零散的分布着。这就像内存,如果不加以管理,就会有很多未被使用的碎片,造成内存的浪费。在linux中,内存是以页(page)来管理的,一page一般为4KB,而外部/内部碎片就是以page为界线划分的。内部碎片就是指被内核分配出去但是不能被利用的内存,而外部碎片是指由于频繁地申请和释放页框而导致的某些小的连续页框,比方只有一个页框,无法分配给需要大的连续页框的进程而导致的内存碎片。如一个page的前后都被分配了出去,没有其他page与之相连,这个page就成了外部碎片。这时候bu

2022-06-29 15:33:35 2960 2

原创 内存管理 -- 伙伴系统(buddy system)

是内核用来管理物理内存的一种算法(需要注意的是它是用来管理物理内存的,而不是映射后的虚拟内存),在物理内存中会除了内核和一些特殊用途的内存外,其余的空闲内存就会交给内核内存管理系统统一管理和分配。如果没有就会出现内存断断续续的情况,如:假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这样子,久而久之就形成了页框的浪费。就是为了(注意:是缓解!!!),它把管理起来的内存分为了不同

2022-06-26 22:30:36 6307

原创 linux内核原子机制

当你对一个简单的变量操作时,如从表面上来看只有一句话,一个操作,但通过汇编来看是它其实分为三步这在平时使用中是完全没有问题的,而在高并发的环境中就会存在很大的问题。假如线程A向value中写入10,同时B向value中写入20.正常的情况下两者会顺序的执行。但实际上有可能会出现:就这导致了A没有达到预期的效果,导致出现不可预计的错误。这时候就需要一个能够把这个操作绑定为一个整体来做,就出现了。在微观中是最小的、不可分割的,我们一些操作也需要这样的效果,所以就取名为。在内核中提供了接口来实现原子

2022-06-23 15:48:43 103

原创 内核已经实现了信号量机制,为什么还需要单独设置一个Mutex 互斥体机制呢?

在linux中,除以外,还有一个互斥体,这两个实现很类似。是在并行处理环境中对多个处理器的访问某一个公共资源进行保护机制,

2022-06-22 22:28:39 347

原创 为什么要有Uboot

uboot是一个裸机程序。uboot主要是用来启动操作系统内核。uboot还要负责部署整个计算机系统。uboot中还有操作Flash等板子上硬盘的驱动。uboot还得提供一个命令行界面来供人操作。计算机系统就是有CPU来做核心进行运行的系统。典型的计算机有:(台式电脑+笔记本),(手机,平板电脑,游戏机),(一些家用电器);不同的计算机有不同的组成部分,但是所有计算机系统运行时主要核心都是3个东西:(Flash / 硬盘) + (DDR SDRAM/SRAM)1、典型的PC机的部署:程序部署在

2022-06-20 22:42:41 238

原创 uboot启动后要解决的事儿

1:开机可直接启动 (1)一般的SOC都支持多种启动方式,SD卡,NarFlash,NandFlash等。。。uboot要能够开机启动,必须根据具体SOC的启动设计来设计uboot, (2)uboot必须进行硬件相对应的代码级别的更改和移植,才能够保证可以从相应介质启动。uboot中第一阶段的start.S文件中具体处理了这一块。...

2022-06-20 22:35:33 175

原创 linux 驱动 PWM 控制灯光亮度

例如:第一章 Python 机器学习入门之pandas的使用linux 下的PWM 驱动,并控制灯光的强弱。PWM它是由3个字母构成,而这3个字母就是3个单词的缩写,分别为pulse脉冲,width度,modulation调制,你对英文不感冒也没关系,只要记住他们对应的汉语就可以,三个单词合起来就是脉冲宽度调制。脉冲宽度调制PWM主要应用于变频,稳压,逆变电源,以及加热系统等。这里有一个知识点–,它跟这个PWM有着密不可分的 联系,而PWM也可以说成占空比可调的方波。我们画一个直角Z字形,这是一个周期,

2022-06-20 00:10:12 742

原创 rockchip 修改开机LOGO和注意事项

rockchip替换kernel中的logo.bmp与logo_kernel.bmp文件,即可替换uboot与kernel的开机logo。logo.bmp为uboot logologo_kernel.bmp 为 kernel logo编译完成后会遇到boot.img过大的情况,这时候就需要修改parameter.txt文件中的boot大小但是parameter.txt里的system分区大小是十六进制扇区的个数,每个扇区是512个字节,所以换算成十进制之后还得乘以512才是字节数,.........

2022-06-19 20:47:47 2321

原创 为什么HAL module名必须是HAL_MODULE_INFO_SYM

Hal层的库文件是怎么被上层调用的?上层调用时的入口(相当于main)又是什么呢?它就是HAL_MODULE_INFO_SYM。下gps.default.so库为例子,上层gpstest.apk打开后,会在/system/lib/hw/下面寻找gps.default.so(也可能是gps.$(platform).so)的这个库,gps.defualt.so的入口就是HAL_MODULE_INFO_SYM, 从此再去调用hal层里的open,init,write,read等接口,hal再通过这个接口去设备结点

2021-04-18 13:20:47 2152

原创 HAL例程

1、简单的HAL最小驱动,用于熟悉架构(1)hal_test.h#ifndef HAL_TEST_H#define HAL_TEST_H#include <hardware/hardware.h>#include <hardware/fb.h>__BEGIN_DECLS //C与c++兼容的宏定义#define HAL_TEST_HARDWARE_MODULE_ID "HAL_TEST" /

2021-04-18 13:18:55 420

linux wiegand driver,单通道支持收发,支持24/36协议

linux 韦根驱动,单通道可收发,支持扩展协议

2022-06-19

空空如也

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

TA关注的人

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