- 博客(53)
- 收藏
- 关注
原创 [x86 ubuntu22.04]进入S4失败
将“/etc/default/grub”文件的“GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"”改成“GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda3"”,指定交换分区的位置为“/dev/sda3”,然后执行“update-grub”命令并重启,即可解决问题。安装成功后,使用“swapon --show”命令查看交换分区,可以看到有/dev/sda3 交换分区,而且类型为partition。
2025-02-05 18:32:48
794
原创 [x86 ubuntu22.04]双触摸屏的触摸事件都响应在同一个触摸屏上
使用“xinput”命令查看输入设备,可以看到只有一个 touch,而且还有一个警告。将 wayland 关闭,修改“/etc/gdm3/custom.conf”配置文件,配置文件如下所示,将“#WaylandEnable=false”改为“WaylandEnable=false”,重启系统,即可关闭 wayland。使用“xrandr”命令可以查看屏幕的名称,最终知道“eDP-1”触摸屏对应的触摸 id 是 14,“DP-1”对应的触摸 id 是 16,使用以下命令成功解决了 bug。
2024-12-24 15:44:49
510
原创 [x86 ubuntu22.04]投影模式选择“只使用外部”,外部edp屏幕无背光
默认情况下内部 edp 屏幕(eDP-1)为主屏幕,外部 edp 屏幕(DP-1)为次屏幕,将外部屏幕设置为主屏幕,命令为“xrandr --auto --output DP1 --primary”,投影模式选择“只使用外部”,效果也是内部 edp 屏幕灭,外部 edp 屏幕无背光,修改内部 edp 屏幕背光调节节点的值,外部 edp 屏幕背光无变化。在投影模式为“镜像”或者“拼接显示器”模式下时,修改内部 edp 屏幕背光调节节点的值,命令如下所示,两个 edp 屏幕的背光一起变化。
2024-12-18 14:26:22
994
原创 [linux 驱动]PWM子系统详解
搜索“rockchip,rk3328-pwm”,发现在./drivers/pwm/pwm-rockchip.c 出现,所以 pwm6 的驱动是pwm-rockchip。任何 PWM 设备实例都可以被注册到 pwm_class 下,用户空间应用可以通过 /sys/class/pwm 访问这些设备,实现对 PWM 功能的控制。struct pwm_device *pwm: 这是指向 PWM 设备结构体的指针,该结构体是在调用 pwm_request 函数时获取的。这是指向该控制器的 PWM 通道的数组或链表。
2024-11-04 12:30:03
1317
1
原创 [linux 驱动]gpio子系统详解与实战
struct gpio_device 为 GPIO 设备提供了一个全面的描述,包括其基本属性、管理信息以及与其他内核子系统(如字符设备、Pin Control 等)的交互能力。指向与该 GPIO 引脚关联的 gpio_device 结构体的指针。指向 gpio_desc 结构体数组的指针,存储与该 GPIO 设备相关的所有 GPIO 引脚的描述信息。一个指向用户自定义数据的指针,可以用于存储与 GPIO 设备相关的额外信息,供驱动程序或其他组件使用。该 GPIO 设备管理的 GPIO 引脚的起始索引。
2024-10-15 15:42:10
1173
原创 [linux 驱动]网络设备驱动详解
当发送数据包时,Linux内核的网络处理模块必须建立一个包含要传输的数据包的sk_buff,然后将sk_buff递交给下层,各层在sk_buff中添加不同的协议头直至交给网络设备发送。3)设备驱动功能层的各函数是网络设备接口层net_device数据结构的具体成员,是驱使网络设备硬件完成相应动作的程序,它通过hard_start_xmit()函数启动发送操作,并通过网络设备上的中断触发接收操作。它主要用于调整 sk_buff 的数据指针,以便在数据包的前面插入新的数据。
2024-10-10 16:50:07
1838
原创 [linux 驱动]input输入子系统详解与实战
方法(2):使用sudo hexdump 命令打开/dev/input/下设备文件,然后分别操作各个输入设备,如果有输出16进制数,说明此时打开的设备文件就对应于当前的输入设备。方法(1):使用sudo cat 命令打开/dev/input/下的设备节点文件,然后分别操作各个输入设备,如果有输出有乱码,说明此时打开的设备文件就对应于当前的输入设备。: 将 input_dev 的父设备设置为传入的设备 dev,确保设备之间的关系正确设置,有利于设备树的管理和资源的分配。通知事件层对输入事件进行 处理。
2024-09-30 11:54:30
1567
原创 [rk3588 debain]cpu死锁问题解决
应用程序功能是:ip摄像头推流,通过rtsp协议拉流,对视频流做裁剪,缩放工作。首先,根据视频帧率每秒钟处理25张图片。其次,每张图片都会做颜色转换和缩放。最后,会根据图像里人的个数并行执行:颜色转换,裁剪,缩放。总体流程:取流,vpu解码,gpu图像处理,npu算法分析。原来系统的rknpu版本为0.82,版本太低了,更新 rknpu的版本为 0.96 解决该问题,更新的代码文件如下所示。rk3588机器上运行客户如下程序程序发生“BUG: spinlock recursion on CPU#0”
2024-09-29 14:01:53
785
原创 [kylin D2000]麒麟系统飞腾D2000下LVDS屏幕BIOS下能亮系统下不亮问题解决方法
结构体 mode_parameter_t 定义了一种模式参数,通常用于描述显示设备(如液晶显示器或其他图形显示设备)的时序和频率设置。将代码放到麒麟系统下,使用 make 命令编译代码,会生成smifb.ko 驱动模块。通过以下命令拉取代码或者使用smifb2.zip 文件解压。执行以下命令替换驱动,重新启动机器,屏幕就成功点亮了。
2024-09-29 10:04:53
431
原创 [linux 驱动]regmap子系统详解与实战
Linux 内核引入了 regmap 模型,regmap 将寄存器访问的共同逻辑抽象出来,驱动开发人员不需要再去纠结使用 SPI 或者 I2C 接口 API 函数,统一使用 regmapAPI 函数。regmap_bus 的结构体,它用于描述一种与寄存器映射(regmap)交互的硬件总线或接口的属性和功能。regmap 提供了最核心的两个读写操作:regmap_read 和 regmap_write。
2024-09-24 14:51:41
1661
原创 [linux 驱动]块设备驱动详解与实战
②块设备在结构上是可以进行随机访问的,对于这些设备的读写都是按块进行的,块设备使用缓冲区来暂时存放数据,等到条件成熟以后再一次性将缓冲区中的数据写入块设备中。但是对于机械硬盘这样带有磁头的设备,读取不同的盘面或者磁道里面的数据,磁头都需要进行移动,因此对于机械硬盘而言,将那些杂乱的访问按照一定的顺序进行排列可以有效提高磁盘性能,linux 里面针对不同的存储设备实现了不同的 I/O 调度算法。这些函数实现了设备的打开、关闭、读写、I/O控制等功能,使得不同的块设备能够通过统一的接口与内核进行交互。
2024-09-24 12:34:42
1791
1
原创 [linux基础知识]教你使用vim和ctags阅读linux内核源码
有时候某个符号有很多索引,使用“Ctrl+]”会跳转错误,这时候可以全局查询指定符号,vim 下使用 ts 命令全局查询指定符号。:ls(查看缓冲区) :e+文件名(打开文件) :b+缓冲区序号或文件名(跳转到其他缓冲区)gg(移动到文本开头)、G(移动到文本末尾)、zz(将本行移动到中间)Ctrl+w+w(切换窗口) :vs+文件名(打开文件并新建一个窗口)Ctrl+w+s(水平分割) ctrl+w+v(垂直分割)移动:h(左)、j(下)、k(上)、l(右)dd(删除本行)、x(删除后一个字符)
2024-09-14 15:28:04
463
原创 [linux 驱动]misc设备驱动详解与实战
所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解决此问题。Linux 系统已经预定义了一些 MISC 设备的子设备号,我们在使用的时候可以从这些预定义的子设备号中挑选一个,当然也可以自己定义,只要 这个子设备号没有被其他设备使用接口。文件节点,使用“ls /dev/misc_test -l”命令可以看到,misc_test 的主设备号为 10,此设备号自动分配的,为 49。
2024-09-14 14:40:11
1818
原创 [rk3399 android11]收到广播执行相应的adb命令
通过adb发布广播即可将micloop####写入到/sys/devices/platform/ff110000.i2c/i2c-1/1-0010/es8323_sound/enable_send。
2024-09-13 20:26:21
582
原创 [linux 驱动]内核定时器详解与实战
这个结构体结合了工作队列(workqueue)和定时器(timer)的功能,使得工作可以在未来的某个时间点被调度执行。对于周期性的任务,除了定时器以外,在Linux内核中还可以利用一套封装得很好的快捷机制,其本质是利用工作队列和定时器实现,这套快捷机制就是delayed_work。工作队列负责实际的工作调度和执行,定时器会将工作项添加到这个工作队列中,以便在延迟时间结束后处理。这个函数接收一个指向定时器自身的指针作为参数,允许回调函数访问和修改定时器的状态或执行其他与定时器相关的操作。
2024-09-13 16:10:12
1697
原创 [linux 驱动]i2c总线设备驱动详解与实战
它定义了驱动程序必须实现的接口和包含的属性,以便与I2C总线上的设备进行交互。i2c_adapter对应于物理上的一个适配器,i2c_adapter 结构体是 Linux 内核中 I2C 子系统的一个核心组件,它封装了与 I2C 总线适配器相关的所有必要信息,使得驱动程序能够高效、安全地与 I2C 设备进行通信。i2c 的框架如下所示, i2c核心提供了I2C总线驱动和设备驱动的注册、注销方法,i2c通信方法(即Algorithm)上层的与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。
2024-09-09 17:14:20
2090
原创 解决samba无权限创建文件问题
将我服务器利用samba工具映射到到电脑后,没有权限在特定的文件里写文件,比如在mcu这个文件夹里面没有写文件的权限。mcu文件夹属性已改变为zwzn2064用户,现在在我办公电脑上可以在我服务器上的mcu文件夹有权限写文件了。查看mcu文件夹的用户属性,属于root属性。使用chown命令更改文件夹用户属性。
2024-09-09 16:24:15
530
原创 ubuntu增加开机自执行脚本服务rc.local
参考文件/lib/systemd/system/rc-local.service。在/etc/systemd/system新建文件rc-local.service。完成,每次开机机器将会自动执行rc.local脚本。在/etc新建文件rc.local。
2024-09-09 16:11:11
371
原创 [linux 驱动]platform总线设备驱动详解与实战
device_driver 结构体(表示 设备驱动)中有个名为of_match_table的成员变量,此成员变量保存着驱动的compatible匹配表, 设备树中的每个设备节点的 compatible 属性会和 of_match_table 表中的所有成员比较,查看是 否有相同的条目,如果有的话就表示设备和此驱动匹配,设备和驱动匹配成功以后 probe 函数 就会执行。platform_device 结构体包含了设备的相关信息,如设备的 ID、资源(内存、IO 地址等)、设备名称和设备状态等。
2024-09-07 10:40:04
1667
1
原创 [ubuntu20.04 rk3588]编译源码./edge build -r报错Unable to locate packagexxx解决方法
/edge build -r编译ubuntu20.04源码时报错。
2024-09-06 08:37:37
158
原创 [linux基础知识]修改用户密码
如果做固件时想要烧录固件后开机时自动修改linaro用户密码,可以在写个脚本,放到服务里面,开机时自动将/etc/shadow文件替换掉。修改后密码后的文件保存在/etc/shadow,该文件内容如下所示。比如要修改linaro用户密码,使用下面切换为linaro用户。使用passwd命令输入新的密码。
2024-09-06 08:16:19
223
原创 [linux基础知识]创建新用户并使用该用户
使用脚本create_user.sh创建vpuser用户,该用户密码为vp@2023,不需要手动输入密码,执行命令即可:sudo ./create_user.sh vpuser vp@2023。赋予vpuser用户bash权限,修改/etc/sudoers,添加vpuser ALL=(ALL) NOPASSWD:/usr/bin/bash。使用adduser命令创建vpuser 用户,需要手动输入密码。使用vpuser用户将压缩包解压到特定位置。使用vpuser用户执行脚本。
2024-09-06 08:07:18
389
原创 [linux 驱动]增加一个文件节点控制led灯亮灭
devm_gpio_request 函数的分析如下所示,该函数通过结合 devres 资源管理机制来简化 GPIO 的分配和释放过程,确保在设备驱动程序卸载时,GPIO 能够自动释放,减少了手动释放的负担。指向class_attribute结构体的指针,这个结构体定义了将要被创建的文件(属性)的属性,比如文件名、模式(只读、只写、可读可写)、显示和存储函数(用于从内核读取或写入内核的数据)等。1、在/sys/class/<class_name>/目录下为指定的类创建一个新的属性文件。用于创建新的设备类。
2024-09-05 08:54:14
2004
原创 [rk3588 ubuntu20.04]移植ROS2
设置语言为UTF-8。使能代码库。添加ROS2秘钥,第三步命令添加秘钥可能会超时,多次执行该命令直到添加成功即可。将ROS2储存库添加到源列表中。设置存储库后,更新apt存储库缓存。安装aptitude工具,为的是能正常安装ros-foxy-rviz2和ros-foxy-joy。如果使用apt来安装ros-foxy-rviz2和ros-foxy-joy会安装失败。安装ros-foxy-desktop的依赖包ros-foxy-rviz2,执行该命令时会要求输入Y/n/q,依次输入n、Y、Y即可。
2024-09-04 10:25:17
2520
原创 [rk3399 android11]去掉音量过高提醒,音量调到最高后重新上电音量依旧是最大
【代码】[rk3399 android11]去掉音量过高提醒,音量调到最高后重新上电音量依旧是最大。
2024-09-03 08:46:39
253
原创 [rk3399 android11]关闭声卡
使用以下命令查看声卡,可以看到目前有三个声卡。修改设备树过后,重新编译代码,烧录固件,再次查看声卡,只剩下一个声卡了。
2024-09-03 08:40:44
474
1
原创 [kylin M900]麒麟操作系统固件修改与合成
为了能让系统开机后自动执行一些命令,在root用户下执行“crontab -e”,将会生成文件:/var/spool/cron/crontabs/root,这个文件可以开机自动执行一些脚本命令或定时执行一定的任务。假如U盘的文件节点为:“/dev/sdc4”,使用命令即可制作启动盘:“./make_bootdisk.sh /dev/sdc4”,脚本make_bootdisk.sh 如下所示,目前该方法制作的启动盘无法正常运行。使用的文件都放在/usr/local/bin/文件下,如下所示。
2024-09-02 09:02:42
2364
原创 mcu loader升级固件原理与实现
这样修改之后,app 模式下响应的中断,会跳转到 COMMON_IRQHANDLER 中断向量下执行程序。loader.bin 和h076_mcu_app.bin 合并成h076_mcu.bin,h076_mcu.bin 一共 64k(根据 MCU 的 flash 大小来调整,如果 flash 的大小为 32k,h076_mcu.bin 应设置为 32k), 其中loader.bin 在h076_mcu.bin 的前 6k 位置中,后 58 k 为h076_mcu_app.bin,如图所示。
2024-09-01 11:35:17
2023
原创 [rk3399 android11]解决机器烧录的新MAC地址却不能使用该MAC地址远程唤醒的问题
【代码】[rk3399 android11]解决机器烧录的新MAC地址却不能使用该MAC地址远程唤醒的问题。
2024-01-25 14:53:30
539
原创 Ubuntu中docker的使用
这个错误的原因是在Docker容器中,默认情况下,大多数操作(包括挂载文件系统)都是不允许的。这是为了确保容器的隔离性和安全性如果你确实需要在容器内挂载文件系统,可以使用--privileged标志运行容器。创建并运行一个docker容器,这样创建的docker还不能完全使用本机硬件。创建并运行一个docker容器,docker中将本机硬件与容器相关联。已经运行的docker容器进入交互模式。查看所有已经创建的docker容器。启动一个docker容器。查看docker镜像。
2024-01-11 12:30:35
440
原创 [ubuntu20.04 rk3588]解决Kernel panic - not syncing: VFS: Unable to mount root fs问题
查看编译信息,原因是cpio命令没有,但是./edge build -k编译内核命令还是编译过了,导致recovery.img生成不正常,大小为31M,正常情况下为61M。编译了Ubuntu20.04的源码成功烧录后,出现问题:不断重启。解决方法安装cpio。
2024-01-10 14:25:06
1771
原创 [ubuntu20.04 rk3588]编译源码./edge build -r报错Unable to locate package xxx解决方法
这样再去编译ubuntu20.04源码就可以从http://10.100.4.153查找并安装相关的包了。打开ubuntu20.04源码目录下的config.json文件,将ip地址写成本机的ip地址。使用http://10.100.4.153/edge就可以查看到自己http服务器的文件了。将ubuntu.tar包放到/home/share/http_source目录下,并解压。进入/var/www/html目录创建软链接。首先安装apache2工具。
2024-01-05 15:37:21
584
1
原创 [rk3399 android11]增加一个服务支持网络唤醒功能并控制电源指示灯的指示状态
【代码】[rk3399 android11]增加一个服务支持网络唤醒功能并控制电源指示灯的指示状态。
2023-12-29 15:06:51
552
1
原创 [debian rk3588]解决./build.sh debian报错chroot: failed to run command ‘/bin/bash‘: Exec format error
执行./build.sh debian命令报错,报错如下。在ubuntu18.04上的解决方法。在Ubuntu22.04上的解决方法。
2023-12-20 17:53:47
2160
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人