- 博客(189)
- 收藏
- 关注
原创 [IMX6ULL]移植NXP Linux Kernel 5.15
仓库[nxp-imx/linux-imx]2. 编译NXP Linux Kernel 5.153. 烧写NXP Linux Kernel 5.15编译生成使用tftp方式下载上面两个文件到板子上(uboot移植看前面的文章)4. 适配正点原子Alpha板子4.1 新建单板配置文件4.2 新建单板设备树文件修改imx6ull-14x14-alpha.dts修改imx6ull-14x14-alpha-emmc.dts修改dts目录下的Makefile, 添加imx6ull
2024-07-21 17:05:23 1079 2
原创 [Debugger]使用openocd+dap-link调试树莓派4B[Cortex-A72]
这里的dap-link使用的是jtag的方式由于使用的是方式连接树莓派,但是OpenOCD的中的是以方式连接,我们要参考它新建一个运行OpenOCD运行GDB运行效果如下:
2024-07-08 14:25:20 404
原创 [A133]全志u-boot中的I2C驱动分析
IIC是高位(MSB)先传输2.1.1 主机发开始信号2.1.2 主机发从机设备地址2.1.3 主机发送从机寄存器地址2.1.4 主机发送数据到从机2.1.5主机发送Stop信号2.2 主机读数据读操作除了下面的两个操作,其他与写一样restart信号实际上就是start信号,只是restart不会reset总线
2024-07-01 14:09:11 489
原创 [A133]uboot启动流程
init_sequence_f数组中特别注意的是下面的函数,将接下来的链接重定位内存结构息息相关。标签的当前地址,并将其存储在链接寄存器(lr)中。这将是代码重定位后的返回地址。)的低4位清零,以确保栈指针(sp)是16字节对齐的。重定位uboot text&bss&data段到内存中的新地址。中,根据平台架构, 有对应的实现,当前平台是armv8。为即将重定位做的内存分配,此时结构如下。寄存器中,以得到重定位后的最终返回地址。到这里重定位的准备工作都做完了,从下面的汇编到C的map可知是。
2024-06-26 11:15:48 761
原创 [IMX6ULL]移植lf-v2022.04 U-boot
ALPHA 板子不同于NXP的EVK开发板,它的LCD RESET使用的是硬件上电复位,所以不需要使用软件复位,即不需要单独的Pin去reset,所以注释EVK用到的lcd reset, 节约引脚(软件上,在LCD时序也需要注释掉它调用reset脚的时序点,在下面有讲到)修改arch/arm/dts/Makefile, 添加alpha板子。修改arch/arm/mach-imx/mx6/Kconfig。修改imx6ull-14x14-alpha-emmc.dts。// 将改变覆盖到MMC。
2024-05-07 22:45:23 562
原创 [RP2040]Ubuntu搭建RP2040开发环境
一、下载SDK和编译链下载SDK下载交叉编译链配置在最后追加二、编译实例工程新开一个终端,进入目录编译blink编程编译完成同级目录下生成:blink.uf2、blink.elf、blink.bin
2024-04-23 17:13:35 820
原创 LVGL在framebuffer设备上的移植
arm-linux-gnueabihf-gcc: 错误: unrecognized command line option ‘-Wshift-negative-value’gcc编译报错 error: ‘for‘ loop initial declarations are only allowed in。文章参考于网友的经验。
2023-12-31 16:43:07 2064 3
原创 kernel的module目录名疑问
原因:kernel的module目录匹配是由kernel编译时生成的版本决定的,本来制作rootfs时创建module文件夹名字是4.1.15,但是修改了内核,内核的version生成信息变了,相应的源码如下:(kernel的顶层Makefile)当修改内核后重新编译后烧到设备上,启动后发现kernel的module名和uname -r对不上了,导致驱动无法加载,出现如下的错误信息。脚本执行的结果拼接而成,其中$(KERNELVERSION)就是内核原本的版本号4.1.15,而。这里主要分为两个部分。
2023-12-29 21:51:36 862
原创 STM32 MCU的易坑点收集
时钟延长是一个术语,某些从设备可以把时钟线拉低,主设备发现自己释放时钟线之后时钟线还没有变成高电平,就会停止发送数据,然后等待从设备释放时钟线。通过这种方式从设备可以告诉主设备你慢点发,我这边还得准备准备,这在从机速率比主机低的时候会有用,stm32会默认开启时钟延长模式[Clock No Stretch Mode=disbale](这里的disable和No双重否定等于肯定),不过大多数IIC设备没有时钟延长的设定.
2023-12-13 10:32:05 610
原创 [socket]客户端connect成功但是服务端accept()函数返回-1问题
等方法异常时是否也往下走了,要及时退出。现象:当客户端运行时,客户端。第一种情况就需要排查前面的。
2023-11-17 11:06:06 796
原创 [Socket]Unix socket 运行权限问题
原因:unix socket是基于文件的fd方式访问,socket_path实际上是一个目录+文件(s文件),要确保这个文件有可读写权限。问题:socket只能在当前源码目录运行,如果是服务端,启动则会出现无法bind, 客户端则会出现无法connect。解决方法:在server端listen方法前修改socket_path的文件权限。
2023-11-13 14:41:29 974 2
原创 [Android 13]Input系列--触摸事件在应用进程的分发和处理
Android 13前面我们已经梳理了input事件在native层的传递,这一篇我们接着探索input事件在应用中的传递与处理,我们将按键事件和触摸事件分开梳理,这一篇就只涉及触摸事件。
2023-07-24 22:13:34 1022 1
原创 [Android 13]Input系列--EventHub获取事件
Android T从前面inputflinger的启动分析中,我们知道事件来源是在, 所以我们重点看下这个方法的流程来了解事件是如何从驱动上报中获取的。
2023-07-12 21:15:45 1068
原创 [Android 13]Binder系列--启动ServiceManager
ServiceManager的启动hongxi.zhuAndroid 13。
2023-07-01 22:44:43 1160
原创 [Android 13]Binder系列--注册服务
基于Android T 分析客户端进程如何通过Binder向ServiceManager进程注册服务的过程以注册SurfaceFlinger为例,分析客户端进程如何通过Binder向ServiceManager进程注册服务的过程。
2023-06-30 17:33:22 580 1
原创 [Android 13]探索ctl.属性控制服务的实现
从上面可知到当socket对端,也就是属性写入端发来数据时唤醒property-service线程,然后将消息入队,唤醒init主线程处理,第二个问题找到答案了,最后一个问题,属性控制事件怎么来的,谁发送的?搜索,实际是在bionic/libc/bionic/system_property_set.cpp中,属性写入是被libc实现为标准API了,所以每个地方写入属性都会调用到这里。这个队列中的,查找这个队列的流程,得到第二个问题的流程。根据属性的前缀,走不同的分支,我们例子看的是。开头的, 其他的同理。
2023-06-24 16:46:54 1397
原创 [Android 13]开机动画原理分析
开机动画跑起来除了需要自身进程的启动外,还肯定以来显示系统的相关进程,即一定需要SurfaceFlinger的进程的合成和送显,所以这里需要启动SurfaceFlinger服务和bootanim服务,两者是在init.rc中启动。上面的构造方法中仅仅中只是获取了SF的session代理对象, 真正的加载逻辑在这个对象的第一次引用回调方法中(在前面的sp指针实例化时被回调)。的情况,这个名字也是很直白,开机动画的实现是图片逐帧动画,和电影的那种原理相同。获取对应的目标的rc文件,并将rc的内容。
2023-06-15 17:28:22 5463 2
原创 编译LineageOS-20并刷入Pixel 2XL
一定要小于8,推荐4~8, 因为LineageOS大部分是去拉AOSP的仓库,Google每个IP限制8个线程,超过就禁止连接,同步失败,由于时差,国内白天时,全球拉取的人数少,拉取速度快于晚上。是Google更新的关于手势的开源仓库,lineage没有及时纳入到Pixel 2XL 的device更新,所以需要我们手动导入这个模块,也是一个坑点之一,Pixel 2XL Google也是有一些文件,处于vendor分区的,并不开源,我们需要从已经刷入相同Lineage 20的Pixel 2XL中通过。
2023-06-06 19:28:37 2580 5
原创 [Android 13]自编译ROM网络连接受限
Android设备在刷了自己编译的固件后,通常连接 WiFi 会出现 “网络连接受限” 这样的字样,原因就是google默认的网络探针地址是国外的,我们在国内无法正常访问,所以出现网络受限的现象,因此我们可以通过下面的方法修改这个探针来解决这个问题。具体可以通过下面两条命令来修改,改完之后,点击飞行模式(重启下网络), 然后关闭飞行模式连接 WiFi 就会恢复正常。参考:https://www.jipinsoft.com/17906.html。方法二 (修改源码,永久生效)
2023-06-05 19:03:11 2698 1
原创 性能调试-将任务绑定到大核
这里解决方法是把surfaceflinger echo到forground组,forground的cpus是0-7,涵盖所有核。一般surfaceflinger绑定在小核也就是0-3的小核,要绑定到大核就需要先解决限制的问题;先获取surfaceflinger的pid信息。查看分组被限制在哪些cpu核上运行。查看进程的分组cpuset。mtk 9701平台。
2023-06-04 22:51:03 659
原创 [Perfetto]应用冷启动流程分析
launcher3通过跨进程调用AMS启动应用的流程,首先是先pause launcher3, 因为目标应用是冷启动,需要通过socket方式通知zygote先fork出新的应用的进程,新应用进程执行自己ActivityThread的main方法,初始化自己的消息队列等,然后通过跨进程bindApplication通知AMS,将该应用加入管理记录,然后继续跨进程通知应用往下执行相应的生命周期。应用执行完相应的生命周期后,开始第一帧绘制,然后显示到屏幕上,冷启动完成。
2023-05-13 15:21:28 713
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人