
Linux
文章平均质量分 63
hello-linux
9年USB开发经验 + 6年网络及以太网驱动开发经验 + 2年PCIe驱动开发经验 + 5年romcode开发经验,专注网卡驱动、网络协议(TCP/IP)、USB驱动及应用开发。
展开
-
linux SD/eMMC 存储架构
2. VFS(虚拟文件系统)层:Linux的 VFS 提供了一个统一的接口,用于访问不同类型的文件系统,如 ext4、FAT32 等。1. 应用层:这是最上层,包括你使用的文件系统工具,如 `dd`、`cp` 或其他工具。4. 块设备层:在这一层,数据被管理为块设备的一部分,SD卡被视为一个块设备。5. 设备驱动层:这是与硬件直接交互的层面,处理与 SD 卡控制器的通信。6. 硬件层:最底层是实际的 SD 卡硬件,数据在这里被物理写入到卡上。Linux向 SD 卡写入数据时会经过哪些软件层。原创 2024-11-17 11:21:43 · 864 阅读 · 0 评论 -
linux nor flash raw读写
而通过/dev/mtdblock4写,先写到一个RAM,然后再更新到flash(这里驱动会先erase),属于间接访问。nor falsh写前需要erase(全FF),/dev/mtd4作为char设备,需要通过ioctl进行erase再写入。通过/dev/mtdN 字符设备或者/dev/mtdblockN块设备 去读写nor flash,无需通过文件系统。注意,通过/dev/mtd4写时,无法写成功,why?为何/dev/mtdblock4 块设备可以直接写?使用/dev/mtd4读可以成功。原创 2024-11-17 11:20:17 · 124 阅读 · 0 评论 -
linux根据uboot env分区参数生成相应分区
kernel根据uboot传递的env分区参数,生成对应的分区。以下以mtd分区mtdparts(spi nor)为例。1)解析cmdline的mtdparts。1. env中设置mtdparts。3. linux mtd分区。原创 2024-11-17 11:07:18 · 363 阅读 · 0 评论 -
boot kernel的几种方式及流程
3. 通过ATF + uboot。1. 通过uboot。原创 2024-11-17 11:04:28 · 95 阅读 · 0 评论 -
嵌入式系统中的AB分区
在实践中,嵌入式设备会有两个独立的分区,即A分区和B分区。在任何时候,一个分区运行当前的操作系统,而另一个分区则用于下载和安装新的更新。更新完成后,系统会在下次启动时切换到包含新版本的分区,同时旧版本保留在另一分区作为备份。这种设计提高了系统的稳定性和可靠性,是现代嵌入式系统中常见的一种做法。嵌入式系统中的AB分区是一种重要的机制,主要用于确保系统更新的安全性和可靠性。这是因为旧的系统版本仍然保存在另一个分区中。1. 无缝更新:AB分区允许系统在后台下载和安装更新,而不影响当前运行的系统。原创 2024-01-05 17:52:47 · 1902 阅读 · 0 评论 -
linux emmc raw 读写
从eMMC分区读取数据到文件:`dd if=/dev/mmcblk0pX of=/path/to/output/file bs=block_size count=number_of_blocks`- 写数据到eMMC分区:`dd if=/path/to/input/file of=/dev/mmcblk0pX bs=block_size`。通过devtmpfs(/dev/mmcblkxxx节点)来访问(读写)block device。原创 2024-01-05 17:50:38 · 885 阅读 · 0 评论 -
nor、nand flash文件系统的选择
对于 NAND 类型的闪存,选择合适的文件系统时需要考虑 NAND 闪存的一些特性,如高存储密度、较低的成本、快速的写入和擦除速度,以及对坏块的管理。- JFFS2 (Journaling Flash File System version 2):这是一种日志文件系统,特别设计用于闪存,能够有效地处理写入和擦除的限制,同时提供数据的完整性保护。选择哪种文件系统取决于具体的应用场景和需求。2. 较慢的写入和擦除速度:NOR 闪存的写入和擦除速度相对较慢,所以理想的文件系统应该尽量减少写入操作和擦除次数。原创 2024-01-05 17:47:11 · 1620 阅读 · 0 评论 -
插sd卡提示: Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
先fdisk新建分区,然后执行:mkfs.vfat /dev/mmcblk1p1 创建fat32文件系统。2)不umount,直接拔卡,再次mount便会出现上述问题。测试mount和umount,不会出现上述提示。1)新格式化的卡测试,无问题。先umount,再拔卡。原创 2023-11-03 17:12:52 · 3417 阅读 · 0 评论 -
SD 轮训方式检测卡插拔
注:只有在polling模式下,mmc_rescan才会调用mmc_schedule_delayed_work(&host->detect, HZ)一直轮询。中断方式无论卡是否在位,都不会polling。host->bus_ops->alive返回0,代表card还在,但是还要继续通过host->ops->get_cd判断一次(原因见代码注释)在dts中配置 broken-cd,使能polling模式。1s polling1次。2. 插入卡(卡在位)原创 2023-11-03 17:01:58 · 344 阅读 · 0 评论 -
SD卡热插拔检测机制
通过TF卡座的pin9来检测,信号CARD_DETECT(pin9)连到soc一个sd_det_n pin(该pin会接到cdns ip的s0_sdcd_n signal)。在没有插卡时,CARD_DETECT信号为高电平。插入T卡后,信号 CARD_DETECT 被拉低,sd controller产生一个中断,即实现了热插拔。Pin1到Pin8和Micro SD卡脚定义相同,Pin9脚是CD(card detect脚),如果插入卡pin9脚就和GND连在一起。原创 2023-11-03 17:00:06 · 2654 阅读 · 0 评论 -
SD使用gpio方式检测卡热插拔
可以观察到,虽然TF CARD(micro)只有8个引脚,但是卡座另外定义了一个CD引脚(DET_SWITCH),该pin可以接到一个gpio。sd slot上的detect pin接到soc的一个gpio pin,插拔卡,会产生gpio中断,再读取gpio value判断卡是否在位。我的猜想是,对于tf card卡座来说,当tf card插入时,会把CD引脚(DET_SWITCH)拉低。当card没有插入的情况下,DET_SWITCH的gpio为高电平。dts配置,如使用gpio1_a8。原创 2023-11-03 16:55:37 · 839 阅读 · 0 评论 -
sparse格式image
使用这个参数,make_ext4fs会根据private/android_filesystem_config.h里定义好的权限来给文件夹里的所有文件重新设置权限,如果你刷机以后发现有文件权限不对,可以手工修改android_filesystem_config.h来添加权限,重新编译make_ext4fs,也可以不使用 “-a system”参数,这样就会使用文件的默认权限。稀疏镜像:即sparse image,将raw ext4进行稀疏描述,因此尺寸比较小,制作目录有多少文件就计算多少,没有全零填充。原创 2023-09-01 19:39:37 · 1454 阅读 · 0 评论 -
FAT32文件系统详解
0x3E8~0x3EB:4个字节,文件系统的空簇数,FF FF FF FF,这个值感觉有问题,格式化SD卡新建一个小于4K的文件,此处的值变成1C F6 FE,所以上面的值应该为0x1FF6FF,猜测可能是由于格式化之后就会将此处置FF,新建文件后才会恢复。6号扇区也会有一个引导扇区的备份,相应的7号扇区应该是一个备份FSINFO信息扇区,8号扇区可以看做是2号扇区的备份。0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已。原创 2023-08-11 17:56:20 · 3288 阅读 · 0 评论 -
fat32:由文件定位存储位置
某簇起始扇区号 = 保留扇区数 + 每个 FAT 表大小扇区数 × FAT 表个数 + (该簇簇号 - 2) × 每簇扇区数。0x1C~0x1F:4字节,DBR分区之前所隐藏的扇区数,0x0,即DBR前面没有隐藏分区(MBR)0x24~0x27:4字节,每个FAT表占用扇区数,0x3a36(总共两个fat表)0x0B~0x0C:2字节,每扇区字节数,0x0200=512字节。0x0D~0x0D:1字节,每簇扇区数,0x20=32。0x0E~0x0F:2字节,保留扇区数,0x0b94。原创 2023-08-11 17:54:20 · 499 阅读 · 0 评论 -
重新编译buildroot中的某个软件包
而根据我们的需要是要修改然后重新编译,安装即可。所以删除.stamp_built和.stamp_target_installed就可以。buildroot中的软件包一但编译完成后,后面重新make,不会再编译该软件包,即使你修改了该软件包的代码。每个工具包里都有.stamp_xxx文件,这几个文件主要控制这个工具包的下载,解压,打包,配置,编译,安装。在main函数中添加:printf("test buildroot rebuild\n");以buildroot-2020.02.8中ethtool为例。原创 2023-06-09 18:45:31 · 1067 阅读 · 0 评论 -
linux虚拟内存布局
Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。虚拟地址空间的内部又被分为内核空间和用户空间两部分。原创 2023-05-24 20:27:24 · 464 阅读 · 0 评论 -
linux支持ipv6
linux ipv6功能原创 2022-12-09 20:58:14 · 1388 阅读 · 0 评论 -
Windows NFS server:Winnfsd
Windows NFS server:Winnfsd原创 2022-12-09 20:51:04 · 2331 阅读 · 0 评论 -
linux NTP同步时间后比实际时间慢8小时
ntp同步时间后比实际时间慢8小时原创 2022-10-09 11:53:08 · 1301 阅读 · 0 评论 -
linux hwclock硬件时钟
inux 读取硬件时间要用到 hwclock 这个命令:hwclock -r 显示硬件时间hwclock -w 将系统时间写入硬件hwclock -s 将硬件时间写入系统时间原创 2022-10-09 11:51:11 · 1683 阅读 · 0 评论 -
linux 开机启动脚本
linuxrc(bin/busybox) --> etc/inittab -->etc/init.d/rcS -->etc/init.d/Sxxlinuxrc是指向busybox的软连接开机自动执行脚本或命令:1. 写一个脚本,然后放到etc/inittab2. 写一个脚本,然后放到etc/init.d/rcS3. 写一个Sxx开头的脚本,放到etc/init.d/4. 直接将命令添加到etc/inittab 或etc/init.d/rcS/e...原创 2021-12-27 19:22:55 · 1513 阅读 · 0 评论 -
linux修改进程优先级
1. 非实时NI 是优先值,是用户层面的概念, PR是进程的实际优先级, 是给内核(kernel)看(用)的。一般情况下,PR=NI+20, 如果一个进程的优先级PR是20, 那么它的NI(nice)值就是20-20=0。可以通过改变NI来改变PR: PRI(new) = PRI(old) + nicenice 值可调整的范围为 -20 ~ 19nice越小优先级越高在进程已经启动时,使用命令renice 10 -pPID ,进行修改NI值伴...原创 2021-05-07 10:13:40 · 1736 阅读 · 0 评论 -
taskset设置CPU affinity
Retrieve or set a processes's CPU affinity(亲和).This requires sched_{g,s}etaffinity support in your libc.1.busyboxcd ~/source-code/mc40/buildroot-2020.02.8make busybox-menuconfigLinux System Utilities--->[*] taskset (4.2...原创 2021-05-07 10:04:24 · 1200 阅读 · 0 评论 -
linux 网络RPS/RFS/XPS
1. 介绍在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说,把不同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;对于数据库服务器这样的应用来说,把磁盘控制器绑到一个 CPU、把网卡绑定到另一个 CPU 将会提高数据库的响应时间、优化性能。合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能。以网卡中断为例,在没有设置SMP IRQ affini...原创 2021-05-06 21:02:45 · 1684 阅读 · 0 评论 -
linux中断与多核CPU的绑定(实现负载均衡)
1.SMP IRQ Affinity硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。传统的 8259A 只适合单 CPU 的情况,现在都是多 CPU 多核的 SMP 体系,所以为了充分利..原创 2021-05-06 20:53:39 · 4189 阅读 · 0 评论 -
linux passwd
passwd - change user passwordThe passwd command changes passwords for user accounts. A normal user may only change the passwordfor his/her own account, while the superuser may change the password for any account.passwd alsochanges the account...原创 2021-04-06 20:29:06 · 385 阅读 · 0 评论 -
在linux 64位系统上运行32位应用
if we want torun 32-bits linux application in 64-bits arch system(ARM cortex-A53, 64-bits), enable CONFIG_COMPAT=yThis option enables support for a 32-bit EL0 running under a 64-bitkernel at EL1. AArch32-specific components such as system c...原创 2021-04-06 20:26:37 · 546 阅读 · 0 评论 -
busybox: route命令
# route -hBusyBox v1.29.3 (2020-08-19 10:46:53 CST) multi-call binary.Usage: route [{add|del|delete}]Edit kernel routing tables -n Don't resolve names -e Display other/more information -A inet{6} Select address family1. ...原创 2021-03-10 18:49:11 · 2957 阅读 · 0 评论 -
MSI(Message Signaled Interrupt)
MSI是什么?MSI(Message Signaled Interrupts)是一种中断方式, 依靠设备将一小段中断描述数据写入特定地址 【注一】来通知CPU中断的产生。MSI从PCI 2.2开始支持, 在PCI 3.0中得到扩展. 支持更多中断以及拥有独立配置各个中断能力的MSI-X则从PCI 3.0开始被支持.注一:这里写入数据,并不是device可以直接向cpu发送数据作为中断的一部分。 而是写到MMIO(memory mapped IO)地址的数据是给chipset的,chi...原创 2021-03-10 18:34:24 · 2100 阅读 · 0 评论 -
linux type-c driver
1. codeinclude/linux/usb/typec.hdrivers/usb/typec2. configDevice Drivers--->[*] USB support---><*>USB Type-C Support--->linux4.19 support Richtek RT1711H Type-C chip andFairchild FUSB302 Type-C...原创 2021-02-07 19:41:55 · 3095 阅读 · 0 评论 -
linux i2c编程
有三种方式实现linux i2c用户态编程,读写i2c外设。1. ioctlioctl(file, I2C_RDWR, struct i2c_rdwr_ioctl_data *msgset)#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/ioctl.h>#include <fcntl.h>#include <l...原创 2021-02-07 19:38:21 · 1846 阅读 · 0 评论 -
用户空间访问I2C设备(i2cdump i2cget i2cset)
1.i2c-toolsi2cdetect i2cdumpi2cgeti2cset1.1 i2cdetect# i2cdetectBusyBox v1.29.3 (2020-08-19 10:46:53 CST) multi-call binary.Usage: i2cdetect -l | -F I2CBUS | [-ya] [-q|-r] I2CBUS [FIRST LAST]Detect I2C chips-l...原创 2021-02-07 19:33:30 · 2954 阅读 · 0 评论 -
测试U盘/硬盘读写速度
1. on windowstool:CrystalDiskMarkwevsite: https://crystalmark.info/en/software/crystaldiskmark/CrystalDiskMark is a simple disk benchmark software.usb3.0 test:2. on linuxtool: dd2.1 writetime dd if=/dev/zero of=....原创 2021-02-07 19:26:05 · 7925 阅读 · 0 评论 -
ARM linux支持extFAT
1. exfat-linuxThisexFAT filesystem module for Linux kernelis a backport of the latest Linux mainline's exFAT drivers by Samsung.https://github.com/arter97/exfat-linux2. build for arm linuxa. add this project file tofs/exfatb.Modifyf...原创 2021-02-07 19:22:41 · 578 阅读 · 0 评论 -
linux分区格式化命令
分区之后,并不能直接使用,需要格式化成特定的文件系统。格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。1. mkfs该命令用来在特定的分区创建linux文件系统,常见的文件系统有ext2,ext3,vfat等,执行mkfs命令其实是在调用:mkfs.ext3 | mkfs.reiserfs |mkfs.ext2| mkdosfs | mkfs.msdos | mkfs.vfat .......原创 2021-01-04 19:45:26 · 3364 阅读 · 0 评论 -
linux gadget u盘(Mass storage)
1. kernel configDevice Drivers ---> [*] USB support ---> <*> USB Gadget Support <*> USB Gadget functions configurable through configfs [*] Mass storageCONFIG_USB_CONFIGFS_MASS_STORA...原创 2021-01-04 19:22:55 · 3257 阅读 · 0 评论 -
linux loop device
在Linux中,有一种特殊的块设备叫loop device,这种loop device设备是通过映射操作系统上的正常的文件而形成的虚拟块设备。因为这种设备的存在,就为我们提供了一种创建一个存在于其他文件中的虚拟文件系统的机制。你有没有想过在Linux的文件管理系统中再创建一个文件系统,这时你就需要用到回环设备(loop device)。在Linux中,回环设备允许用户以一个普通磁盘文件虚拟一个块设备。设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 virtualfs 的普...原创 2020-12-07 21:01:42 · 414 阅读 · 0 评论 -
bootcmd和bootargs
1. bootcmduboot上电启动后会自动倒数bootdelay秒,如果没有人按下回车打断启动,则uboot会自动执行bootcmd启动命令来启动内核。这个参数包含了一些命令,这些命令将在u-boot进入主循环后执行。示例: bootcmd=boot_logo;nand read 1000000 3c0000 300000;bootm 1000000 意思是启动u-boot后,执行boot_logo显示logo信息,然后从nand flash中读内...原创 2020-12-07 20:59:56 · 699 阅读 · 0 评论 -
linux cpu cache
cache分为Dcache和Icache,本文讨论Dcache即数据cache。什么是DMA:就是在CPU不参与的情况下,由DMA控制器完成内存RAM和其他外设(usb、网卡等)的数据传输,可以写RAM,也可以读RAM。具体方式就是设定DMA的源地址和目标地址,以及DMA方式,然后写入传输的字节数就可以启动DMA数据传输了。CPU设置完后就不用管数据的传输。DMA牵涉到cache,因为CPU为了提高和RAM的交互性能,会把RAM中的部分数据放到cache,这样CPU从cache读要比..原创 2020-12-07 20:40:50 · 3021 阅读 · 0 评论 -
linux kernel printk log(以及dev_dbg)
The smaller the num value, the higher the log priority.1.view loglevel# cat /proc/sys/kernel/printk94179:console_loglevel, messages with a priority higher than this value are printed to the console4:default_message_lo...原创 2020-09-08 19:44:09 · 1238 阅读 · 0 评论