自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(251)
  • 资源 (3)
  • 收藏
  • 关注

原创 C语言高级编程系列

关于C语言高级编程系列文章。笔者主要从事Linux kernel、BSP、driver以及TCP/IP方向工作,日常主要使用C语言。工作数年,感叹C语言的简洁却不简单,至今仍不敢说精通C,希望可以通过此系列文章的总结系统地提升自己。更新于:20191124目录:C语言高级编程:预处理中的 # 和 ## C语言高级编程:深入理解const C语言高级编程:数组名赋值给...

2019-09-08 11:20:21 8110

原创 软件开发的一些思考及心得体会

网上搜索的答案一般能解决问题,但也许不是最佳方法或正确的方法,可能存在一定的局限性。 修改kernel内核代码虽然代码量不大,但是要求熟悉的面很广,往往需要了解或熟悉很多模块,看很多相关代码,才能成功的修改或添加一个小的功能! 有时困难并不在于programming,而在于方案以及原理。方案清晰,原理明白,写代码可以说是水到渠成。 分享会或者讨论会或者review...

2019-03-23 14:58:49 1181

原创 TCP协议实现的功能

TCP协议需要实现的功能: 三次握手,建立连接 四次挥手,断开连接 流量控制,基于滑动窗口协议 拥塞控制 慢启动 拥塞避免 快恢复 快重传 差错控制 丢失重传 出错重传 乱序 基于序号、ACK、超时(需要使用定时器)、checksum MSS(TCP Maximum Segment Size) ...

2021-06-08 20:38:56 11 1

原创 网卡offload功能介绍

offload 是将本来该操作系统进行的一些数据包处理(如TCP分段、IP分片、重组、checksum、TCP协议处理等)放到网卡硬件中去做, 降低系统 CPU 消耗的同时,提高处理的性能。普通网卡用软件方式进行一系列TCP/IP相关操作,因此,会在三个方面增加服务器的负担,这三个方面是:数据复制、协议处理和中断处理。1)TSO(TCP-Segmentation-Offload):将TCP分段工作交由网卡驱动执行,该特性需要网卡硬件支持。使能TSO后,操作系统可以将一个不超过...

2021-06-08 20:34:50 14

原创 Linux TCP拥塞控制算法及版本

reference:https://linuxgazette.net/135/pfeiffer.html1. the kind of linux congestion control algorithms High Speed TCP The algorithm is described in RFC 3649. The main use is for connections with large bandwidth and large RTT (such as Gbi...

2021-06-08 20:30:51 9

原创 网络MTU和MSS

1. MTUMTU: Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 byte 需要发送,只需要一个IP包就可以完成发送任务;如果IP层有> 1500 byte 数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IP Header ID相同。2. MSSMS...

2021-06-08 20:26:55 15

原创 以太网PHY接口:MII RMII GMII RGMII SGMII

1. MII/GMII(Gigabit Media Independent Interface)1.1 MII/GMII signal1.2 MAC <--> PHY1) GMII:2) MII:In 1000BASE-T mode, when the GMII interface is selected, a 125 MHz transmit clock is expected on GTX_CLK.Alth...

2021-06-08 20:24:52 26 1

原创 Marvell 88E1111(1000M PHY) linux 配置

1. driver drivers/net/phy/marvell.c drivers/net/phy/phy_device.c include/uapi/linux/mii.h (register) 2. kernel configDevice Drivers ---> [*] Network device support ---> -*- PHY Device support and infrastruct...

2021-06-08 20:22:41 34

原创 RTL8211F PHY linux配置

2. kernel configMakefile:obj-$(CONFIG_REALTEK_PHY)+= realtek.oDevice Drivers--->[*] Network device support--->-*-PHY Device support and infrastructure---><*>Realtek PHYsCONFIG_...

2021-06-08 20:17:40 22

原创 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 43

原创 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 53

原创 linux 网络RPS/RFS/XPS

1. 介绍在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说,把不同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;对于数据库服务器这样的应用来说,把磁盘控制器绑到一个 CPU、把网卡绑定到另一个 CPU 将会提高数据库的响应时间、优化性能。合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能。以网卡中断为例,在没有设置SMP IRQ affini...

2021-05-06 21:02:45 47

原创 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 87

原创 buildroot: irqbalance

1. introductionIrqbalance is a daemon to help balance the cpu load generatedby interrupts across all of a systems cpus....

2021-05-06 20:45:10 17

原创 Ostinato 发包

1. 新建流1) click(choose it) port2) file -> new stream3) double-click name, fill in name, and then Edit stream4) protocol selection5) protocol data, MAC6)protocol data, IP7)protocol data, ICMP8)stream ...

2021-05-06 20:40:23 23

原创 以太网物理层(PHY)

PHY包括MII/GMII(介质独立接口)子层,PCS(物理编码子层),PMA(物理介质附加)子层,PMD(物理介质相关)子层,MDI子层。 MII:medium independent interface,介质无关接口。提供公共接口,屏蔽这些物理层的不同细节 PCS:physical coding sublayer,物理编码子层,8B10B编码或8B1Q4编码等。 PMA: Physical Medium Attachment sublayer,物理介质连接子层,负责数据串化/解

2021-04-06 20:34:38 98

原创 千兆以太网物理层 8B1Q4/4D-PAM5

1. Encoding on 1000Mbps Gigabit EthernetFor copper cable based Gigabit Ethernet (1000BASE-T), a pair of encoding methods was chosen,8B1Q4and4D-PAM5. For fiber optic based Gigabit Ethernet (1000BASE-X), a different pair of encoding methods was chosen,...

2021-04-06 20:32:50 113

原创 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 23

原创 基于UDP/TCP的网络协议(端口分配)

每一个应用层(TCP/IP参考模型的最高层)协议一般都会使用到两个传输层协议之一:面向连接的TCP传输控制协议和无连接的包传输的UDP用户数据报文协议。运行在TCP协议上的协议: HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议...

2021-04-06 20:27:38 23

原创 在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 21

原创 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 121

原创 linux usb串口终端(usb tty console)

1. tty(printf)1.1enable usb gadget serialUSB Gadget Support <*> USB Gadget precomposed configurations <X> Serial Gadget (with CDC ACM and CDC OBEX support)Note, if don't enable serial gadget, uart-console will outpu...

2021-03-10 18:46:02 166

原创 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 53

原创 dwc3 usb debugfs(otg switch)

1. driverdriver/usb/dwc3/debugfs.cdwc3_probe ->dwc3_debugfs_init()2. enable debugfsmount -t debugfs none /sys/kernel/debug3. user space path# ls /sys/kernel/debug/300000.dwc3/link_statemoderegdumptestmode4. otg...

2021-03-10 18:30:33 82

原创 linux usb host ACM(usb虚拟串口)

support usb device that use ACM driver, and generate /dev/ttyACMx in host.1. kernel configDevice Drivers------> USB support <*> USB Modem (CDC ACM) supportUSB Modem (CDC ACM) support:This driver supports USB modems...

2021-03-10 18:29:02 73

原创 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 221

原创 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 89

原创 用户空间访问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 70

原创 测试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 95

原创 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 40

原创 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 420

原创 usb g_zero driver

Gadget Zero is a two-configuration device.It either sinks and sources bulk data; or it loops back a configurable number of ...

2021-01-04 19:42:52 71

原创 linux usb host串口驱动支持(cha341 and pl2303)

base on kernel4.19usb host usb2serial deiveryou have a USB device that provides normal serial ports, or acts like a serial device,Please read <file:Documentation/usb/usb-serial.txt>1. kernel configDevice Drivers--->[*] U...

2021-01-04 19:39:22 88

原创 windows RNDIS

refer to: https://docs.microsoft.com/en-us/windows-hardware/drivers/network/remote-ndis--rndis-21. introductionRemote NDIS (RNDIS) is a bus-independent class specification for Ethernet (802.3) network devices on dynamic Plug and Play (PnP) bu...

2021-01-04 19:30:57 164

原创 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 378

原创 linux loop device

在Linux中,有一种特殊的块设备叫loop device,这种loop device设备是通过映射操作系统上的正常的文件而形成的虚拟块设备。因为这种设备的存在,就为我们提供了一种创建一个存在于其他文件中的虚拟文件系统的机制。你有没有想过在Linux的文件管理系统中再创建一个文件系统,这时你就需要用到回环设备(loop device)。在Linux中,回环设备允许用户以一个普通磁盘文件虚拟一个块设备。设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 virtualfs 的普...

2020-12-07 21:01:42 54

原创 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 73

原创 在uboot命令行添加自定义命令

1. code#include <common.h>void test_usb(void){ //add function }static int do_testfdlusb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]){ test_usb(); return 0;}U_BOOT_CMD( testfdlusb, 1, 0, do_testfdlusb, "t

2020-12-07 20:57:12 70

原创 noncached memory

allocnone-cached memory in uboot.1. APIarch\arm\include\asm\system.hvoid noncached_init(void);phys_addr_t noncached_alloc(size_t size, size_t align);2. implementationarch/arm/lib/cache.c#ifdef CONFIG_SYS_NONCACHED_MEMORY/* * R...

2020-12-07 20:51:43 84

原创 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 109

基于stm32的语音识别

基于stm32的语音识别,专用语音芯片ld3320,源代码,详细资料介绍

2014-04-15

python基础教程(第三版)源码

python基础教程(第三版)配套源码 ·

2018-04-27

python基础教程(第三版)高清PDF 带书签 非扫描

python基础教程(第三版)高清PDF 带书签 非扫描 .

2018-04-27

空空如也

空空如也

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

TA关注的人 TA的粉丝

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