- 博客(413)
- 资源 (13)
- 收藏
- 关注
原创 性能优化——避免使用除法
ARM 硬件上不支持除法指令。编译器是通过调用 C 库函数来实现除法运算的,要花费 20~100 个周期。如果不能避免除法运算,那么就尽量使除数和被除数是无符号的整数。
2024-03-31 19:54:15 390
原创 字符设备驱动编写
每一个主设备号(major) 对应 /proc/devices 下的一个设备,使用 register_chrdev() 创建。每一个次设备号(minor) 对应 /dev/ 下的一个设备文件,使用 mknod 或 device_create() 创建。
2024-03-15 21:45:00 909
原创 内核打印应用程序出错信息,DEBUG_USER
当用户程序由于异常而崩溃时,内核可以打印一条简短的消息来说明问题所在。这有时对调试很有帮助,但对生产系统没有任何作用。大多数人应该在这里说 N。此外,你需要在内核命令行上传递 user_debug=N 来启用此特性。
2024-02-29 22:32:54 759
原创 ASLR 和 PIE
ASLR 不负责代码段以及数据段的随机化工作,这项工作由 PIE 负责。但是只有在开启 ASLR 之后,PIE 才会生效。无论是 ASLR 还是 PIE,由于颗粒度问题,被随机化的都只是某个对象的起始地址,而在该对象的内部依然保持原来的结构,也就是说相对偏移是不会变的。
2024-02-26 21:43:45 669
原创 PAGE_OFFSET
PAGE_OFFSET 的值支持通过 Kconfig 配置,其默认的值是 0xC0000000,即用户空间 3GB,内核空间 1GB。当然这个可以由我们动态配置,可以配置 PAGE_OFFSET 为 0x80000000,即用户空间和内核空间均为 2GB。
2024-01-31 23:15:00 325
原创 ARM 寄存器
Cortex A 系列的 ARM 处理器共有 40 个 32 位寄存器,其中 33 个为通用寄存器,7 个为状态寄存器。用户模式和系统模式共用同一组寄存器。
2024-01-11 21:37:25 1348 1
原创 USB2.0 Spec
A device that has multiple interfaces controlled independently of each other is referred to as a composite device.
2023-12-18 22:45:00 959
原创 USB2.0 Spec 中文篇
一个设备可能有一个或多个接口。(复合设备具有多个接口,驱动中,是只认接口,不认设备的,一个驱动程序对应一个接口。一个包含两个接口的复合设备,如电子琴,包含键盘接口和扬声器接口,那么就会有两个驱动与该设备对应,即键盘驱动和扬声器驱动)
2023-12-14 22:15:00 1814
原创 DHCP Host Name
udhcpc 命令使用 -x hostname:xxx 选项,可以在 DHCP Discover 报文中添加 option 12 选项,即 Host Name。
2023-12-05 23:37:16 939
原创 genimage 打包镜像
用户准备好待打包的原料:uboot.bin、zImage、rootfs 等,然后编写一个配置文件 genimage.cfg,描述如何进行打包,然后运行 genimage -c genimage.cfg 就可以打包好一个镜像。
2023-11-29 23:15:00 640
原创 /dev/root
/dev/root 曾经是 /dev/mmcblk0p2 的软链接,在使用这个软链接将该设备挂载到根目录后,又将该软链接删除了。
2023-11-27 01:42:38 703
原创 uboot 和 内存地址
在 uboot 的 .config 和 Makefile 文件中,使用 CONFIG_SYS_TEXT_BASE 宏来指定代码的入口地址
2023-11-09 23:12:20 574
原创 GCC 优化等级(O0、O1、O2、O3)对程序性能的影响
O3 直接将内层循环给优化掉了,10 次循环展开成 10 次指令,也是牛逼。这样一来,少了内层循环的边界判断。更重要的是,少一层跳转,就减少一次分支预测判断,这对指令执行的效率有显著提升。
2023-10-09 22:05:40 1819
原创 ARM Linux DIY(十四)摄像头捕获画面显示到屏幕
摄像头对应 /dev/video0,屏幕对应 /dev/fb0,所以我们只要写一个应用程序,读取 video0 写入到 fb0 就可以了。
2023-09-29 06:30:00 384
原创 ARM Linux DIY(十一)板子名称、开机 logo、LCD 控制台、console 免登录、命令提示符、文件系统大小
Linux 吉祥物小企鹅已跃然屏上
2023-09-11 00:47:14 538
原创 ARM Linux DIY(十)LRADC 按键
有时 ARM SOC 需要三五个按键,这时候 LRADC 就是一个不错的选择,它使用一个引脚,就可以扩展几个到几十个按键。
2023-09-07 21:56:12 928
原创 ARM Linux DIY(九)陀螺仪调试
一开始使用内核自带的 IIO 驱动,发现只能在 /sys/ 目录下读取相应的坐标值,读取 /dev/iio:device0 有问题,并且需要配置中断引脚才能编译通过。所以就不使用内核自带的驱动了。网上找了个 6050 的驱动。
2023-09-07 21:40:31 572
原创 ARM Linux DIY(八)USB 调试
USB 电路简单,只有两根线 D+、D-,器件也简单,就一个 USB 母座,甚至连电阻电容都不需要,其它外设如果也能像 USB 这样就好了。
2023-09-06 00:37:05 1033
原创 ARM Linux DIY(六)音频调试
对于 SOC 来讲很简单,就一个引脚 HPOUTL(单声道);对于扬声器来讲也很简单,就两个引脚,插上就可以了。另外一个关键点是电容和电阻要焊到位,有没有噪音,音质好坏,全屏电容电阻打下手。
2023-09-01 00:12:39 947
原创 ARM Linux DIY(三)板载串口和 LCD 调试
发现上电后匹配的是 panel-sitronix-st7789v 这份驱动,那就禁用此启动,换下面的试试,结果还真可以,上电后屏幕直接就显示启动 log 了。
2023-08-23 23:21:56 1272 4
原创 ARM Linux DIY(二)配置晶振频率
板子上焊接的是 26MHz,设备树中配置的是 24000000,这样导致系统时钟不正确,最终产生的串口波特率不是 115200,所以乱码。
2023-08-20 15:05:40 642
自己动手写一个操作系统-MBR(5)
2023-01-27
linux_cmd_test.exe
2021-01-10
MDIO之STM32源码
2020-05-08
Linux device driver中文版.pdf
2020-04-04
FX_serial_asst.rar
2020-01-10
OPCUA服务端客户端QT源码
2019-06-17
Android TCP_Client
2018-09-01
ioremap() 的逆函数是什么?
2023-08-01
无源晶振的振荡原理是什么?
2023-05-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人