Linux
文章平均质量分 63
发呆健将
嵌入式Linux驱动及应用开发,欢迎交流!
展开
-
/lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29‘ not found
运行交叉编译的程序时出现如下错误提示:./a.out /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ***)原因是交叉编译器使用的版本太新了,换个和设备匹配的gcc版本就好了!原创 2021-07-13 19:42:00 · 6093 阅读 · 0 评论 -
Linux USB驱动架构
《Linux设备驱动开发详解:基于最新的Linux4.0内核》—— USB主机、设备、与Gadget驱动架构USB驱动分为主机侧和从机侧:主机侧由设备驱动、USB核心、USB主机控制器驱动组成,从机侧由:Gadget Function驱动、Gadget Function API、UDC驱动组成,此外OTG协议既能当主机也能当从机:主机侧:USB核心将USB控制器驱动与USB设备驱动分层向USB核心注册USB控制器驱动USB设备驱动调用USB核心层API从机侧的Gadget API.原创 2021-07-07 16:45:50 · 877 阅读 · 0 评论 -
A311D温度控制
以下根据A311D的降温策略理解Linux Thermal架构Linux Thermal驱动架构Thermal框架分为四部分:Thermal Driver负责将获取温度的设备,注册成struct thermal_zone_device,比如Temp Sensor、NTC等;Thermal Governor负责如何控制温度,注册成struct thermal_governor,比如Step Wise、Bang Bang等;Thermal Cooling负责将控制温度设备,注册.原创 2021-05-28 19:38:54 · 890 阅读 · 1 评论 -
Linux程序分析工具
Linux针对性能调优设计了许多分析工具,这些工具对于分析整个系统性能可提供巨大的帮助。影响性能的因素有cache、I/O,系统调用,系统内核、CPU性能等等。比如某些程序无法充分利用 cache,从而导致性能下降。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等。 主要的分析工具有:CPU性...转载 2021-05-22 14:55:32 · 424 阅读 · 0 评论 -
Linux显示驱动子系统
梳理下Linux显示相关的驱动框架,如:Framebuffer LCD mipi-DSI HDMI VGA GPU DRM/KMS等的关系,要不然一头雾水。查阅:DRM/KMS架构Framebuffer架构Linux的Graphics子系统原创 2021-04-06 18:36:47 · 1056 阅读 · 0 评论 -
Linux挂载debian/ubuntu注意事项
挂载debian/ubuntu Linux内核需要勾选以下选项NamespaceCgroupFhandle原创 2021-02-22 17:10:09 · 123 阅读 · 0 评论 -
undefined reference to
编译出错g++ -O2 -g -lm -lrt -Llib_dir -lLib test.o -o out编译时出现错误: undefined reference to ‘func’排除常见问题objdump和nm命令查看库文件中确实含该函数;-L也指定了库的位置,-l也链接了库文件定位到问题改为如下就好:g++ -O2 -g test.o -Llib_dir -lLib -lm -lrt -o out总结在链接库时需要注意的库的依赖顺序,若库层层依赖,底层的库要放到更后原创 2020-11-04 15:52:38 · 219 阅读 · 0 评论 -
A311D项目开发总结
A311D项目有感最近项目使用了Amlogic的A311D平台,这款芯片的功能跟性能相比于其他平台都比较优秀了,当然他的开发过程也是让自己感觉收获了很多,这里就稍微做下回顾吧项目使用了荣品的A311D核心模块,硬件上内存相较于VIM3和odroid-n2存在差异,其他相差不大;荣品提供的SDK使用的是Buildroot构建的方式,uboot、kernel、ramdisk、rootfs统统打包在一起,而且编译打包一次的时间非常长,这是不能接受的,所以后面很多工作都是在将这些部件拆分开来;荣品SD原创 2020-10-24 11:25:35 · 6353 阅读 · 8 评论 -
A311D NPU支持
A311D NPU模块A311D包含一个NPU单元,可用于神经网络运算,支持Tensorflow、Caffe 和Darknet等主流的深度学习模型要使用NPU单元需要Linux内核勾选AMLOGIC_NPU,dts中也需要使能NPU,并为NPU预留一定内存Linux 内核:khads linux 4.9.232若存在/dev/galcore这个设备则说明NPU使能成功,如下图:A311D NPU使用Khadas:khadas npu 使用指南NPU SDK链接:aml_npu_sdk_6原创 2020-10-22 14:44:15 · 3127 阅读 · 6 评论 -
嵌入式学习书籍
嵌入式学习书籍C/C++RTOSLinuxARM网络C/C++《C专家编程》《C陷阱与缺陷》《C和指针》《C++ Primer》RTOS《uCOS-II 中文书(邵贝贝)》《RT-Thread 编程指南》Linux《How Linux Works 2nd Edition》《精通Linux 第二版》–【美】Brian Ward《嵌入式Linux开发教程》–周立功《Professional Linux Kernel Architecture》《深入理解Linux内核架构》–【美原创 2020-08-28 09:55:31 · 595 阅读 · 0 评论 -
Linux设备驱动开发:I2C驱动架构
读《Linux设备驱动开发详解:基于最新的Linux4.0内核》—— Linux I2C核心、总线与设备驱动 篇I2C核心I2C总线驱动I2C设备驱动原创 2020-07-14 18:16:32 · 247 阅读 · 0 评论 -
make: aarch64-himix100-linux-gcc: Command not found
按照海思文档安装完交叉编译器后执行:sudo make CROSS_COMPILE=aarch64-himix100-linux- -j 20报错:make: aarch64-himix100-linux-gcc: Command not found执行命令又成功:aarch64-himix100-linux-gcc -vUsing built-in specs.COLLECT_GCC=aarch64-himix100-linux-gccCOLLECT_LTO_WRA..原创 2020-06-11 10:52:28 · 4313 阅读 · 2 评论 -
Coreutils交叉编译
Coreutils包括常用的shell命令,由于自己编译的busybox的mv命令不支持 -T 参数所以重新交叉编译一下移植:编译版本: Coreutils-8.27下载:wget https://ftp.gnu.org/gnu/coreutils/coreutils-8.27.tar.xz解压: sudo tar -xvJf coreutils-8.27.tar.xzcd coreutils-8.27/设置交叉编译器:export CC=/opt/Toolcha..原创 2020-06-06 10:35:11 · 1067 阅读 · 0 评论 -
Linux进程间通信方式
匿名管道(pipe) 流管道 有名管道(FIFO) 信号量(semaphore) 信号(signal) 消息队列(message queue) 共享内存(shm) 内存映射(mmap) Socket Binder(android特有)...原创 2020-04-22 10:37:05 · 169 阅读 · 0 评论 -
UBI及EXT4文件系统
UBIFS介绍:由于超大容量NandFlash的普及,YAFFS等皆无法再去控制NandFlash的空间,于是在2006年由IBM与Nokia的工程师设计开发了UBI(UnsortedBlockImage)及其UBIFS文件系统,专门为了解决MTD(MemoryTechnologyDevice)设备所遇到的瓶颈。UBIFS可以认为是JFFS2文件系统的下一代产品。JFFS2运行在M...原创 2020-03-16 17:47:44 · 2595 阅读 · 0 评论 -
mtd-utils交叉编译
由于制作的Busybox缺少ubiformat命令,然后自己移植mtd-utils,这里记录下:环境:Ubuntu虚拟机19.04mtd-utils依赖zlib、lzo、e2fsprogs提供的库和头文件:zlib: 1.2.11http://www.zlib.net/lzo: 2.10http://www.oberhumer.com/opensource/lzo/do...原创 2020-03-11 10:42:47 · 2628 阅读 · 1 评论 -
Ubuntu虚拟机使用Debos构建Debian10
Ubuntu虚拟机版本:19.04Golang版本: 1.13.4 linux/amd64步骤:1.安装必要软件:sudo apt install golang git libglib2.0-dev libostree-dev qemu-system-x86 \ build-essential qemu-user-static debootstrap sys...原创 2020-03-03 10:16:51 · 705 阅读 · 0 评论 -
Linux 驱动注册流程
Linux设备管理模型将device、driver以链表的形式绑定在总线Bus上,向总线注册一个驱动时会去匹配相应设备,这里梳理下一个驱动注册的流程:1.驱动模块初始化函数module_init()被调用流程:start_kernel();rest_init();kernel_init();kernel_init_freeable();do_basic_setup();do_i...原创 2019-10-24 14:07:08 · 824 阅读 · 0 评论 -
Linux多网口配置问题
最近发现一个Linux网络神奇现象:设备有两个网口,当只用网线连接其中一个网口时,两个网口的IP都能被ping通(ping掩码设置成网段兼容)。网上查了后原来是因为 Linux 默认的 sysctl 规则引起的,Linux的任意网卡会对系统的所有IP地址在ARP请求上做回应,所以当只插一根网线去ping两个网口的IP时,每个IP的ARP请求都会获取到插着的这个网口的物理地址,如图:...原创 2019-07-06 11:32:27 · 2814 阅读 · 0 评论 -
busybox制作initramfs以及切换rootfs
公司有个产品需要支持Reliance Nitro文件系统,方案中真正的根文件系统存在EMMC当中,需要做一个initramfs,当initramfs启动后再切换到EMMC当中的rootfs,以下是详细的initramfs制作过程,以及切换真实根文件系统需要注意的事项。1.下载编译busybox从busybox官网下载安装包,解压,进入解压后的目录下执行以下操作:(1)进入配...原创 2019-07-30 19:33:24 · 3667 阅读 · 0 评论 -
Ubuntu64位安装ARM交叉编译环境出错:No such file or directory
报错:No such file or directory解决:将以下库全部安装上sudo apt-get install ia32-libssudo apt-get install lib32z1sudo apt-get install lsb-coresudo apt-get install lib32stdc++6sudo apt-get install lz...原创 2019-07-27 14:10:37 · 1314 阅读 · 0 评论 -
O_DIRECT标志写文件
为测试Linux文件系统意外掉电super_block被破坏的情况,使用O_DIRECT标志对文件进行写操作,这里记录下注意事项:O_DIRECT标志为直接跨过系统高速缓冲,直接对设备进行读写; 加入O_DIRECT标志,读写buff首地址需对其512字节,读写大小必须为512字节倍数; 源文件开头需加上#define _GNU_SOURCE,否则显示O_DIRECT未定义; #def...原创 2019-08-05 18:43:55 · 710 阅读 · 0 评论 -
e2fsprogs移植
想实现在initrd文件系统中对emmc分区中的ext4文件系统进行修复的功能,但是之前用Busybox做的initramfs中fsck命令只支持minix文件系统,所以将e2fsprogs的fsck.ext4命令进行手动移植到initramfs中,以下是整个过程:从http://e2fsprogs.sourceforge.net/下载源码包 解压源码包: tar -zxvf e2fsp...原创 2019-08-09 12:06:32 · 1245 阅读 · 1 评论 -
Linux层次文件系统overlayfs
简介 OverlayFS是一种目前广泛应用的层次文件系统,openwrt、树莓派、docker等上都有应用。它于2014年被合并到Linux3.18内核中,顾名思义其主要特性就是“覆盖”,OverlayFS将单个Linux主机上的两个目录分层,并将它们显示为单个目录。这些目录称为层,OverlayFS的下层目录为"lowerdir"上层目录为"upperdir",合并目...原创 2019-08-24 14:45:56 · 2339 阅读 · 1 评论 -
ramdisk制作
之前写的一篇制作initramfs的总结是将initramfs和内核Image打包在一起的方案,因为我们有款产品需要将ramdisk和Image分开存储,所以这篇文章讲解ramdisk分开引导的方案。1.Busybox文件系统制作请参考之前的文章:https://blog.csdn.net/m0_38096844/article/details/977867612.打包ramdi...原创 2019-08-16 11:34:28 · 1374 阅读 · 3 评论 -
initrd和initramfs及根文件系统切换
一.initrd和initramfs区别1.initramfs是对initrd的升级;2.initrd将根文件系统包和Image分开,而initramfs将根文件系统与内核打包在一起;3.initrd文件系统占用的内存得不到释放,而initramfs可以释放内存;4.initrd是基于ramdisk实现,initramfs是基于ramfs实现;5.ramdisk是把一块内存(r...原创 2019-08-21 16:51:19 · 2121 阅读 · 0 评论 -
ramdisk + overlay打造只读文件系统
为避免设备意外断电出现文件系统损坏,根文件系统起不来的情况,用ramdisk+overlay的方式制作分层的只读文件系统,lower层为只读文件系统,upper层为可读写分区,这样当文件系统出现问题时只需将upper层文件删除即可恢复文件系统,具体方案如下:硬件资源:SPI FLASH : 4MNAND FLASH: 1G基于nand flash 不可靠考量,...原创 2019-08-28 14:49:37 · 955 阅读 · 0 评论 -
O_DIRECT打开文件失败
内核版本:Linux 4.1.39-g35786aadeab-dirty文件系统:UBIFS返回错误errno值:22 对应EINVAL官网说明:https://man.cx/open(2) EINVAL The filesystem does not support theO_DIRECTflag. SeeNOTESfo...原创 2019-09-03 10:46:57 · 2429 阅读 · 0 评论 -
i.MX6模组MYC-6ULX使用
最近一个项目使用得是米尔的MYC-Y6ULY2系列模组,该模组基于飞思卡尔的i.MX6系列处理器内核 ARM® Cortex-A7主频 800M模组内置 512MB DDR3模组内置 4G eMMCSD Card*1:Console:CH340E UART to Micro USB串口*16:4路原生 12路为USB转出:GL852G-OHG12 :1路USB...原创 2019-09-21 10:55:41 · 434 阅读 · 0 评论 -
dts : rx8025t与lm75bd
外部RTC芯片rx8025t的时序与rx8025其他系列不同,但是兼容ds1307,可在内核中选择ds1307的驱动。温度芯片lm75bd兼容lm75a系列,可直接在内核中选择lm75a驱动。&i2c2 { clock_frequency = <100000>; pinctrl-names = "default"; pinc...原创 2019-09-29 09:44:57 · 981 阅读 · 0 评论 -
Linux使用设备树的i2c驱动与设备匹配方式
Linux使用设备树的i2c驱动与设备匹配有3种方式:of_driver_match_device acpi_driver_match_device i2c_match_id源码:static int i2c_device_match(struct device *dev, struct device_driver *drv){ struct i2c_client...原创 2019-09-29 11:24:41 · 3427 阅读 · 0 评论 -
Linux串口编程详解(阻塞模式、非阻塞模式、select函数)
之前一直觉得串口编程很简单,这两天仔细研究后发现串口里的各种参数还挺复杂,稍不注意就容易出错,这里总结一下网上的各种文章及自己的理解与实践。open 函数功能描述:用于打开或创建文件,成功则返回文件描述符,否则返回-1,open返回的文件描述符一定是最小的未被使用的描述符#include<fcntl.h>int open(const char * path...原创 2019-06-01 13:33:20 · 9490 阅读 · 5 评论