自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 rk3568 Android11 隐藏导航栏及插入u盘不自动生成文件夹

效果:可移动卷不再创建 11 个默认目录(Music、Podcasts、Ringtones、Alarms、Notifications、Pictures、Movies、Download、DCIM、Documents、Audiobooks)。只有不显示导航栏的时候,且persist.ido.swipeup.navigationbar 属性设置为1的时候,执行导航栏的显示。发送自定义广播 android.ido.intent.action.navigation.SLIDE。

2026-09-22 09:52:35 157

原创 Android14 系统默认语言改成中文

修改位置:device/rockchip/rk3576/rk3576_u/rk3576_u.mk。

2026-09-22 09:49:39 180

原创 RK3576 Android14 mipi camera适配

当前板子有三块摄像头接口,两处imx415,一处ov13855是确保。

2026-09-21 11:26:33 187

原创 RK3576 Android14 mic声音小的问题解决

使用录音软件录音,发现收音特别小录音链路在 HAL 的 codec_config/es8389_config.h。

2026-09-16 17:07:37 166

原创 RK3576 音频修改:解决HDMI抢占媒体声音

可见有三张声卡。

2026-09-16 15:22:23 141

原创 Android 解码4k视频

当前默认配置是没有带解码工具的,需自己添加。

2026-09-16 14:18:54 154

原创 Android 编译 OpenSSL 符号冲突问题

具体表现为:openssl: undefined symbol: EVP_mdc2, version OPENSSL_1_1_0,本质是。(构建 APEX 镜像的 host 工具)调用。确认Ubuntu 20.04。,导致签名/哈希操作失败。

2026-09-10 17:23:31 262

原创 配置双扬声器--RK3562

SPK_HP 做的是"把 DAC 的输出同时推给上面两个输出级",两个喇叭放的是同一份内容(严格说是同一份 L/R 立体声信号都被复制到两个出口,不是左声道给一个、右声道给另一个)。所以这个属性的真实含义是:"这颗 SPK 不接芯片内部 Class D,而是从 HP/line-out 脚接到板上的外置功放芯片"。它不是"多开一个功放",而是换一个出口。驱动用 devm_gpiod_get_optional(dev, "spk-ctl", GPIOD_OUT_LOW) 取,取到就存到。去掉属性 → 走!

2026-09-10 16:51:42 141

原创 调试常用命令

让设备在 host 和 device 模式间切换。节点路径不同平台差异大,可以用。

2026-08-24 10:35:53 35

原创 源码加驱动--基于rk3562

假设当前要给sc850摄像头加驱动。

2026-08-18 18:14:43 162

原创 外设配置--基于RK3562

维度I2C(总线)物理连线SCL(时钟), SDA(数据)+ GND(2根信号)通信方式总线型一主多从,一条总线可挂多个设备)设备识别每个从设备有唯一的 7 位地址(如 0x38、0x1A)典型用途传感器、触摸屏、摄像头配置、RTC1、先看soc级的配置2、接着到板级配置,使能SARADC3、同时在板级当中,可以配置具体ADC按键配置4、接着在rk3562-pinctrl.dtsi配置saradc通道的引脚配置成adc模式。

2026-07-13 10:30:15 263

原创 实习日记--驱动学习

调试手段用途什么时候用把崩溃时的地址转换成函数名+行号系统abort卡死时iomem命令读指定寄存器的值怀疑某个硬件状态不对时md/mw命令读/写任意内存地址查看或修改内存内容gpio命令查看/设置GPIO电平外设供电或复位脚异常时i2c命令读/写I2C设备寄存器PMIC或传感器通信异常时fdt命令查看当前设备树内容确认设备树节点是否生效mmc命令读写eMMC/SD卡存储读写异常时查看驱动probe状态某个外设驱动没初始化时时间戳打印给U-Boot日志加时间戳分析启动耗时。

2026-07-06 15:54:45 251

原创 linux通用基础

0:就绪的 fd 总数0:超时-1:出错(errno)定义 fd_setFD_ZERO 清空FD_SET 把需要监听的 fd 加进去调用 select用 FD_ISSET 遍历判断哪个就绪。

2026-06-16 17:18:23 460

原创 Platform总线的驱动编写

of_match_table = of_match_ptr(my_of_match), // 设备树匹配(可选)},

2026-06-15 16:42:51 251

原创 实习日记--驱动编写

* 数据缓冲区 *//* 当前数据长度 *//* 打开次数统计 */

2026-06-15 16:15:21 191

原创 GIT的使用

Git 是目前最流行的分布式版本控制系统,用来记录文件的变化、协调多人协作,最初是为了管理 Linux 内核开发而创建的。可以把它理解成一个强大的“存档+时光机”系统:存档:项目每次有意义的变化,比如完成一个新功能,都可以存为一个“快照”。时光机:任何时候都可以回退到过去某个版本,或查看某个文件的修改历史。多人协作:在不干扰别人的情况下并行开发,最后再优雅地合并成果。为了理解它,需要知道这几个核心概念:仓库:一个项目文件夹,所有的历史记录都保存在其中的一个隐藏文件夹 里。工作区、暂存区、仓库:Git 的

2026-06-12 17:41:53 277

原创 实习日记--SDK相关知识

SDK 的全称是,中文叫。简单来说,你可以把它理解成一个。当你想在某个软件项目里实现一个复杂的功能(比如微信登录、支付、云存储),如果从头自己写,会非常耗时且困难。这时候,你就可以直接“拎”起这个现成的工具箱来用。

2026-06-12 11:49:55 188

原创 实习日记--核心板第一周

了解公司核心板:IDO-EVB3568-V1/IDO-EVB3562-V1对两块核心板的功能外设进行了解,了解各个接口分别是什么。

2026-06-09 17:26:22 286

原创 实习日记--基础内容学习

win+r输入sysdm.cpl,然后在系统属性中选高级,点环境变量,在系统变量里面找到path,选中之后编辑,新建选择我下载的adb.exe的路径,最后点确定。接着win+r输入cmd进入终端,输入adb devices,如果显示.....device,代表连接正常,便可以通过adb shell进入板子系统adb,不是在开发板的 shell 里用的deviceadb shelladb logcatCtrl+Cadb rebootfastbootdeviceofflineunknown。

2026-06-05 10:07:14 273

原创 C++学习--类和对象

1、类是抽象的模板,对象是具体的实例2、一个类可以创建无数个对象,每个对象都拥有类定义的属性和行为,但数据可以不同3、类规定了 “是什么样”,对象是 “这个具体的东西构造函数 = 创建对象时自动调用的初始化函数,用来给成员变量赋初值,避免野数据。(只能在public里面)无返回类型,函数名与类名一致系统也会生成一个默认拷贝构造函数如果类中含有指针类型的变量,浅拷贝会发生一些错误。

2026-05-29 10:49:25 246

原创 C++学习基础

为了防止命名冲突使用方式。

2026-05-24 17:09:07 63

原创 EXIT外部中断

中断程序结束后,要记得调用清除中断标志位的函数,不然只要中断标志位置一了,程序就会跳转到中断函数,如果不清除中断标志位,那它就会一直申请中断,就卡死了。NVIC根据每个中断的优先级分配先后顺序,然后根据唯一的输出口告诉cpu该处理哪个中断,所以中断优先级不是由cpu分配的,cpu不参与分配优先级。这些是 STM32 里能产生中断的外设,它们会把中断请求信号发给内核里的 NVIC。抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,两个优先级相同的按中断号排队。高抢占优先级可以打断低抢占优先级的中断。

2026-05-23 10:21:30 275

原创 stm32学习1--新建工程

iopcen使能gpio时钟用于配置输出模式(推挽/开漏)

2026-05-21 17:59:31 79

原创 ARM Linux:库移植

拷贝ARM动态库到NFS根文件系统 cp /home/linux/sqlite-install/lib/libsqlite3.so* /home/linux/nfs_root/usr/lib/6、# 拷贝头文件到NFS根文件系统 cp /home/linux/sqlite-install/include/* /home/linux/nfs_root/usr/include/ #arm-linux-gnueabihf-gcc -lxxx -L xxx/lib 需要使用-L指定库的路径。

2026-04-19 21:20:22 388

原创 Linux驱动:中断

本次以IMUX6ULL的按键驱动中断为例。

2026-04-15 22:00:17 379

原创 linux中断:顶半部与底半部

中断可以分成两个部分,顶半部和底半部。

2026-04-15 20:15:24 393

原创 IIC子系统

实现基于IIC总线驱动的IIC设备驱动例在之前的bsp里面裸机驱动,lm75->设备驱动,IIC->总线驱动 IIC的收发->(master_xfer())调master_xfer所需资源:从机地址,adapter分离,分层设备跟驱动分离,总线驱动和设备驱动分层。

2026-04-15 14:52:43 530

原创 linux驱动----驱动程序

设备驱动分类:设备驱动分类:字符设备驱动 -- 数据的访问是字节流(有序访问)块设备驱动 -- 数据可以随机访问(一般访问是按块访问的存储设备)网络设备驱动 -- 集成复杂的协议栈,网络设备靠名字管理1. 设备的操作方法(open/read/write/ioctl/close)2. 设备号 ---用于区分不同的设备设备号: 高12位主设备号 + 低20位的次设备号组成主设备号: 区分设备类型 (功能)次设备号:区分同类的不同设备3. 向系统注册设备驱动。

2026-04-09 20:59:31 82

原创 Linux驱动2

tftp 0x80800000 zImage tftp下载,将zImage下载到内存的0x80800000地址处。tftp 0x83000000 pt.dtb tftp下载,将pt.dtb下载到内存的0x83000000地址处。bootz 0x80800000 - 0x83000000 启动0x80800000地址处的内核。向内核新增文件(以向drivers/char目录下新增demo.c为例)3. 修改同层目录下的Kconfig文件,新增一个DEMO的配置。setenv ipaddr 删除环境变量。

2026-04-08 20:29:49 248

原创 linux驱动1

3-2 根文件系统在ubuntu上,则内核应该通过nfs挂载ubuntu上的rootfs目录(bootloader向内核传参是应该包含内核启动阶段使用的ip)2-1 内核在SD卡中,则bootloader需要在代码中初始化好SD卡,然后读SD的kernel分区写入内存。--- 搬移内核到内存 --- 向内核传参(根文件系统类型,init进程,控制台)nfs----网络文件系统(做网络之间的文件共享)-----bootload不再控制CPU,CPU控制权移交给内核。

2026-04-07 20:15:01 378

原创 I2C通信

空闲时总线保持高电平,SDA由高到低时代表一次通信开始,SCL开始产生时钟信号,SCL为低时,SDA可随意跳变,SCL为高时,SDA保持不变若最后结束时为高电平,接收方应答有效则会把总线拉低,无效则会保存高电平若最后结束时为低电平,接收方应答则保持不变,无效则上拉电阻将电平拉高小结:起始信号:SCL为高时,SDA由高变低数据发送期间:SCL为低时,SDA可以跳变,SCL为高时,SDA保持不变(每次传输以8bit为基本单位),数据发送完成后,由接收方发出应答信号(1bit的低电平)

2026-04-01 10:55:32 394

原创 ARM———UART

指单位时间(1 秒)内通信链路可以传输的码元数量,是衡量通信符号传输速率的核心指标。在 UART 串行通信中,单个码元仅能承载 1 个 bit 的二进制数据,因此 UART 的波特率在数值上等同于单位时间内传输的 bit 数。USR2:TXDC/RDR 发送完成状态位,用于判断发送链路是否完全空闲 接收数据就绪状态位,用于判断是否有新数据可读。,单帧数据内的起始位、数据位、停止位,均遵循统一的单 bit 时长,以此保证收发双方的时序同步。UBIR/UBMR:设置波特率。URXD:读取收到的数据。

2026-03-30 21:35:10 596

原创 Linux常用知识点

1、只使用局部变量(栈上)2、不读写全局变量、静态变量3、不调用不可重入函数(如 malloc、printf、strtok)4、不修改自身代码5、不使用固定缓冲区。3、heap(堆):2.8/2.9G左右,进程空间中其他部分使用剩余的空间,使用时需要手动申请。(新开辟一个线程,就要新开辟一个栈,若一个进程空间有多个栈,则是多线程)4、map(映射区):映射一些库(函数)的地址(库位置/函数偏移地址)2、stack(栈):8M,局部变量/函数参数/函数返回地址。

2026-03-28 10:35:32 515

原创 ARM——General Purpose Timer (GPT)

配置延时函数GPT 是一款 32 位多功能定时器,输入时钟经 12 位预分频器(1~4096 分频)后驱动 32 位计数器自由计数;它同时支持与两大核心功能:输入捕获通道可在引脚电平跳变时(如 GPT_CAPTURE1 的上升沿),将当前计数值锁存到对应 Timer Input Reg 并触发捕获中断;输出比较通道则通过将计数器值与 3 组 Timer Output Reg 比对,匹配后触发输出中断并通过输出模块控制引脚电平变化;

2026-03-27 20:22:48 1175

原创 ARM中断设置--定时器中断

在上图的例子便是在计数寄存器counter register和load register,假设counter register和load register里面都是100,开始计数之后,counter register就会开始递减,当counter register减到0之后,load register里面的100便会装进去,然后再重新开始计数。EPIT 计数寄存器(EPITx_CNR)是 32 位只读寄存器,用于实时记录当前递减计数的剩余计数值,是定时器计数状态的直观体现。EPIT 加载寄存器(

2026-03-27 19:32:04 447

原创 ARM时钟配置

由于担心分频/倍频过于频繁,最后的频率老是确定不了,导致收到错乱的时钟,使得工作极其不稳定,因此先给最后接上晶振,等待分频/倍频配置完成之后,再给其接上。1、先根据下面寄存器,先将step_sel选为24M,再改为step_clk(最后记得配置完改回pll1_main_clk)PERCLK_CLK_ROOT、AHB_CLK_ROOT、IPG_CLK_ROOT这些常用,根据图片配置其分频器与选择器件。2、再根据下面寄存器,先给13位置1使能,再根据公式算出div_select填入最后。RTC是用来记时间的。

2026-03-26 20:48:10 495

原创 ARM 中断初始设置

GIC中断优先级设置:GIC_SetPriority(“中断号”,“优先级”);GIC中断使能:GIC_EnableIRQ(IRQn_Type IRQn);配置引脚功能及其方向 GPIO_DIR。ICR:中断配置寄存器,IMR:中断屏蔽寄存器。设置中断触发方式 ICR/IMR。一、首先要设置异常向量表地址为0(因为为0才可重映射)在汇编中结合c函数进行。因此在iqr中要先给lr减4再入栈。

2026-03-25 21:09:17 213 1

原创 常见知识点总结

HTTP 应答报文的结构分为三部分:状态行、响应头(报头)、空行、响应正文。3、常用排序时间复杂度。

2026-03-24 21:05:31 187

原创 常用知识点

通过仲裁机制实现“主设备动态切换”,当多个主机同时发起通信时,通过SDA线电平竞争决定谁获得总线控制权。→ 实时性好,延迟低,功耗控制优异,完美匹配“边缘设备 + 实时推理 + 能效比最优”三重需求;,设备只能作为从机,不可切换为主机(除非是OTG,但标准USB不支持动态切换)→ 极高能效比(如手机SoC中的NPU、寒武纪、华为达芬奇架构等);→ 缺点:功耗高、体积大、不适合边缘设备(如手机、IoT终端);→ 优点:可定制化强、功耗可控、适合特定场景加速;→ 缺点:AI推理效率低、功耗高、延迟大;

2026-03-23 21:33:31 949

原创 arm基础IMX6ULL----点亮led

3、在IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03中低四位配置成0x10b0,GPIO1_IO03。--再根据led0这个网络标号找到在插接件的B47这(其实此时已经找到在gpio3那了)--将其配置成GPIO_IO3 mode值为0101。--使用一个选通门(用MUXIO_SW来控制这个选通门)选择引脚功能。--先在底板找led1找到其对应的网络标号是led0。--再去核心板上查找得到GPIO1_IO3。--该板子由一个底板和一个最小系统板组成。--使用PAD_SW控制电气特性。

2026-03-22 18:35:51 376

空空如也

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

TA关注的人

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