自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hezhensheng007的专栏

人生要么精彩,要么平淡。既然挣扎着活了下来,就该努力让自己的每一步趋向辉煌。

  • 博客(27)
  • 收藏
  • 关注

原创 RK3588的linux下实现HDMI输出分辨率及帧率的裁剪

RK3588 linux系统下HDMI输出分辨率及帧率修改

2025-04-17 15:48:59 272

原创 linux 基础知识点之工作队列workqueue

多年前就了解了workqueue着玩意,但理解上就并不是很很深刻,今天重新梳理一下,本文重点的是哪个些现成的demo代码,都是可以直接拿来用的,这就是写这文章的目的和作用,就是为了备份后续工作用到的时候,可以快速Ctrl+c and Ctrl + v,接下来复制些前辈写好的理解概念,再结合一下个所整理得demo。把工作(包括该工作任务的执行回调函数)添加到一个队列,称为workqueue,即工作队列,然后通过worker-pool中的内核工作线程(worker)去执行这个回调函数。

2025-02-09 21:36:24 827

原创 RK3588 AR0234 IPC 平台的1920*1280分辨率实现裁剪像素

RK平台的IPC上将sensor的像素实现不同的分辨率裁剪

2025-01-18 14:15:13 532

原创 linux 基础知识点之module_param_named调试小技巧

module_param_named模块参数宏有助内核的调试

2025-01-14 11:04:49 546

原创 linux 基础知识点之定时器timer_list和高分辨率定时器hrtimer

HZ表示一秒的节拍数, 也就是频率。系统的节拍率一般看系统内核宏.config文件里CONFIG_HZ,比如CONFIG_HZ=100意思是1s钟经过100HZ, 100HZ的节拍率的时间精度是10ms。

2025-01-09 15:48:16 1009

原创 (MTK平台mt8168)通过i2c调试外接MCU管理外接电源项目

android系统通过i2c外接MCU 单片机进行通信,ARM端通过i2c读取MCU端的管理电源信息,从而上报给android系统

2025-01-06 16:41:41 1207

原创 Linux 浅析sysfs文件系统

之说以想谈谈linux的sysfs文件系统,因为前不久写了一篇关于proc文件系统的文章,所以就顺带整理一下sysfs文件系统,那么啥事sysfs文件系统?sysfs文件系统为用户空间程序提供了一个直观和方便的方式来访问和控制内核中的设备和驱动程序信息,是Linux系统中设备管理和驱动程序开发的重要工具。设备和驱动程序信息:sysfs将设备和驱动程序的信息以文件的形式组织起来,每个设备或驱动程序都有一个对应的目录,目录下的文件表示其属性。结构组织:sysfs采用层次化的目录结构,反映了内核对象之间的关系。

2025-01-06 11:07:30 411

原创 英伟达Xavier NX 开发系列之新增/proc/xx节点展示版本号

新增 /proc/xxx 文件节点信息,方便用于新增自行管理系统版本号,可绕开cat /proc/version linux官方的版本信息

2024-12-17 16:42:05 827

原创 【软件中的硬件】光耦(光电耦合器)的工作原理

在交流到直流(AC/DC)转换的电源中,整流器将交流电压转换为脉动直流电压,滤波电容则用于减少这种脉动,提供相对稳定的直流电压。在数字电路中,滤波电容用于去耦合,即提供局部的直流电源,减少电路元件之间的相互干扰。在某些电路设计中,滤波电容有助于稳定输出电压,特别是在负载变化时,电容可以提供瞬时电流,从而减少输出电压的波动。在电源线或信号路径中,滤波电容可以吸收高频噪声,减少电磁干扰(EMI),从而提高电路的稳定性和信号的质量。在某些电源电路中,滤波电容可以改善功率因数,减少无功功率,提高电源的效率。

2024-12-14 16:26:41 494

原创 修复kernel编译栈帧大小异常问题error: the frame size of 1928 bytes is larger than 1024 bytes

并且内存是4K分页,创建一个内核栈就需要申请连续2块的4K页,内存紧张的时候,申请8K的连续内存比申请4K困难的多;(1)栈内存申请过大,或者函数调用层次太深都会导致栈溢出,引起系统崩溃,在编译时会去检查栈使用大小是否超过配置的栈大小;(1)编译器编译内核时,发现栈帧大小是1024字节,但是栈使用是1928字节,超过了默认栈帧大小;补充:目前我所接触到的内核配置,32位的系统配置的栈大小一般是1K,64位的系统栈大小一般是4K;(1)优点:节省内存,都占用不到一个4K页,创建内核栈时比较容易;

2024-11-20 16:52:27 754

原创 英伟达Xavier NX 开发系列之如何烧录l4t_initrd.img

l4t_initrd_flash.sh: 是一个用于烧录 Nvidia Jetson 设备的脚本, 烧录初始 RAM 磁盘(initrd)映像到 Jetson 设备的脚步,用于恢复初始 RAM 磁盘(initrd)--initrd //Stop after device boot into initrd. //进入recovery模式后,停止设备进入 initrd。将旧的l4t_initrd.img备份,新的my_l4t_initrd.img重命名替换旧的,然后将之烧录jetson设备上。

2024-11-18 15:19:36 586

原创 C语言字符指针(char *)和 char (*)[200] 区别

当你提供一个数组名或者指向数组的指针时,比如 char myArray[200] 或者 char (*myArrayPtr)[200],你需要确保传递的是数组的首地址,而不是整个数组。总之,你需要确保传递给 %s 的是一个 char * 类型的参数,即字符数组的首地址。如果编译器警告你类型不匹配,检查你的代码,确保你没有错误地传递了一个数组或者指向数组的指针。如果你有一个指向数组的指针,你需要先解引用它,然后取第一个元素的地址。如果你有一个指向字符数组的指针,你应该传递这个指针,而不是整个数组。

2024-11-18 11:06:48 201

原创 Linux 内存检测

函数已经申请hack_spinA锁和hack_spinB锁,等到hack_spinBA()函数去申请hack_spinB锁时,因为刚才hack_spinB锁还没被释放,所以它会一直在等待,这个就是传说中的死锁。该错误类型在slub中被称为poison overwrittern,即访问已经被释放的内存,或者存在上面几种访问内存错误,那么产品将存在安全隐患,所以在开发阶段需要对内存进行严格测试。kasan提示这个是一个越界访问的错误类型(slab-out-of-bounds) ,并提示错误函数名称和错误位置。

2024-09-12 17:43:38 1019

原创 VMware Workstation 和 Ubuntu系统在开机异常:initramfs

Ubuntu系统在开机异常:initramfs

2024-08-05 17:38:41 290

原创 Linux Shell基本运算符浅讲解

其实简单理解,就是C语音中的“=,!=, >, < , >= ,

2024-06-20 14:12:35 243

原创 分析linux应用发生Segmentation fault段错误时(core dump)文件定位错误

在Linux系统中,通常把“主内存”称为核心(core),而核心映像(core image)就是进程process执行当时的内存内容,当进程收到一个信号“single”而终止时,系统会将这个核心映像写入一个文件作为调试使用,这就是所谓的核心转储“core dump”,当一个程序蹦掉是就会生成一个core文件,可以将此文件生成在指定的路径。ulimit -c unlimited //不限制产生的core的大小。直接上报Segmentation fault出来,Step1: 开启core dump文件存储,

2024-06-06 18:46:22 413

原创 Nvidia 设置Sensor的Gain无效分析整理

写入driver层的fils_operations中的.unlocked_ioctl = ***_ioctl()REG_GIAN 是xdma控制Image Sensor Gain的一个寄存器地址,那么只有实现往这个地址去写入上面datasheet中的Sensor Gain 中的register Value即可。因为这个项目是经过xdma和sensor通讯的,没有直接通过arm和sensor通讯,所以找到xdma控制sensor Gain的地方即可。,增益是按倍数(times)进行设置。

2024-05-24 13:49:56 614 2

原创 nvidia 应用开发QT中的.pro浅解

接触编译linux应用时,有cmake,qmake或者直接gcc来编译,那边在nvidia的平台,我选择了已经编译好的QT中的qmake来生成MakeFile文件,至于为何这里就不展开,这里重点说说.pro文件。然后根据.pro的语法来添加修改即可,添加SOURCES,TARGET,COMPLATE等等,包括如何编译lib库文件,如何在应用导入头文件includepath += **.h 和如何导入已经编译好的lib库文件LIBS += ... 详细请查阅下面.pro的源文件。

2024-05-18 21:30:00 295

原创 在ubuntu下如何根据芯片编译对应的QT

这里确认RV1106所采用的是(arm-rockchip830-linux-uclibcgnueabihf),一般RK是release在sdk的里面的tools目录下面(\tools\linux\toolchain\arm-rockchip830-linux-uclibcgnueabihf)------------------------------------分割线----------------------------------------------//重点要注意的地方,不影响其他的。

2024-05-15 21:00:00 484

原创 linux ubuntu实现自启动app

在系统的根目录下面,new一个新的service文件出来,/etc/systemd/system/my-auto-start-app.service。启动服务并设置自启动,保存该文件后,在系统中执行:sudo systemctl enable my-auto-start-app.service,Description字段包含了一个简短的描述,用于描述服务的名称,方便用户在查找时快速了解服务的作用。Type字段是服务运行时的类型,simple表示它是一个后台进程,通常用于只有一个进程的服务。

2024-04-30 08:39:00 707

原创 英伟达Xavier NX 开发系列之如何升级单独分区 kernel dtb

cpu-bootloader non-current //此处为nvidia给出的参考说明,bootloader-dtb non-current //此处为nvidia给出的参考说明,nvidia给出的技术支持是,更新一个单独的分区,那么具体是如何操作呢?# sudo reboot //升级完毕后,需要手动执行重启系统才能生效。在编译sdk的环境先将bl_update_payload编译出来。按照说明大概流程,按照流程需求大概整个脚本来。在编译环境下,先通过如下操作即可生成。

2024-04-08 21:49:59 927

原创 kernel 系列之ktime_get()和ktime_sub()快速统计函数耗时

简单理解为在无论用户层在read/write 文件设备的时候,Xilinx XDMA 均最终两个接口调用同一个接口char_sgdma_read_write()进行数据输出, 接口以一个bool变量驱动,数据是读还是写。在debug的过程,在read buffer的时候,耗时是比较长的,关于该函数参考上面大佬的分析即可,这里主要说说ktime_get()的函数使用。//ktime_sub计算其差值,就是这段代码运行消耗的时间。ktime_to_ns()和ktime_to_ms()通过上面即可快速获取。

2024-03-07 18:47:59 2493

原创 英伟达Xavier NX 开发系列之kernel层的GPIO控制开发

在开发gpio之前,先了接一下dts的入口先,因为该dts非常重要,找到入口后面任何节点相关信息都是通过此来include进来的,对dts有所研究的都应该能理解此点。to 287 on device: gpiochip1 (tegra-gpio-aon)//说明248为tegra-gpio-aon的基值。在回到通过kernel的打印,找到信息找出每组GPIO的分配范围,目的是找出不同的GPIO组的偏移值。这个文件,因为该文件是Xavier NX系列的gpio定义说明,后面的分析会用到这点。

2024-03-05 14:02:53 762

原创 英伟达Xavier NX 开发系列之如何系统克隆

/ 短接Recovery+GND两个引脚,给Jetson device (Xavier NX)上电,通过专用烧录的usb口连 // 接到烧录开发电脑(Ubuntu~18.04)上,如果是虚拟机的话请确保设备是连接到虚拟机里的 // Ubuntu中。个人认为注意事项在于,需要搞清把主板上的recovery+GND两个pin脚短接,进入recovery模式,烧录也好,克隆也好,也都是需要在此模式进行。// 在克隆过程会耗时较长,请耐心等待,执行完克隆命令后,//如何将镜像烧录到主板上。

2024-02-22 19:30:00 1990 1

原创 英伟达Xavier NX 开发系列之烧录环境的搭建

Step1: 一般新回来的开发板都是已经烧录好系统的了,直接通过命令sudo cat /etc/nv_tegra_release查阅出该驱动版本:R32.7.2。直接使用已编译好有的bootloader/system.img,参数“ -r”即表示不重新make,这里可以节约不少时间,无需每次都编译,注意两者的确区分。-c ./tools/kernel_flash/flash_l4t_nvme.xml:指定烧录的 xml 文件,即第三步修改的文件。剩下其他的板卡类型所需要的相关信息,自行官网或者论坛查阅。

2024-02-21 21:45:00 1419

原创 英伟达Xavier NX 开发系列之快速搭建kernel编译环境

硬件平台: Jetson Xavier NX 8GB驱动版本: R32.7.2 可以通过命令查阅出版本开发前一定要清楚版本,错误的版本会导致后期烧录失败清晰上述信息后,主要分两个步骤:1.在nvidia将sdk开发代码和编译工具链下载下来2.配置好环境,通过build.sh脚本快速编译出kernel出来官方技术网站:直接将红框部分的下载下来://我采用的是手动下载下来,并非是通过git下载下来,所以截取相关的说明。

2024-02-20 21:30:00 1312

原创 kernel 系列之printk打印

最后实际就是pr_err的内核函数,查阅kernel的api说明即可。在kernel中的include/printk.h中。重点的打印函数为dbg_irq();那么此函数又来自哪里呢?来自前面的libxdma.h。在调试xdma的时候,有看到不少的内核打印信息,通过uart串口,或者dmesg,或者cat /dev/kmsg 即可获取到相应的信息。那么代码是来自哪里呢?

2024-02-19 09:45:28 1399 2

空空如也

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

TA关注的人

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