自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 C语言高级编程系列

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

2019-09-08 11:20:21 3049 0

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

网上搜索的答案一般能解决问题,但也许不是最佳方法或正确的方法,可能存在一定的局限性。 修改kernel内核代码虽然代码量不大,但是要求熟悉的面很广,往往需要了解或熟悉很多模块,看很多相关代码,才能成功的修改或添加一个小的功能! 有时困难并不在于programming,而在于方案...

2019-03-23 14:58:49 764 0

原创 libusb开发指南

libusb学习笔记 ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版 libusb版本 :2016-10-01: v1.0.21 作者:wang baoli E-mail: baoliw@foxmail.com libusb学习网站: web...

2018-10-07 20:18:44 14729 0

原创 visual c++ build tools的安装与使用

开发环境: win10 + Microsoft Visual C++ Build Tools 2015 -----------------------------------------------------------------   The Microsoft Visual C++...

2018-09-02 11:44:23 76807 27

原创 linux usb gadget kernel配置

reference: https://www.linux4sam.org/bin/view/Linux4SAM/USBGadgetConfig there are TWO kind of gadgetconfiguration 1)USB Gadget functions confi...

2020-07-05 10:39:34 34 0

原创 ioremap介绍及用法

ioremap: mapphysical address to kernel virtual address, we can usekernel virtual address to access register. 1.get physical address rsc_p = p...

2020-07-05 10:36:07 6 0

原创 bus hound

website:http://www.perisoft.net/index.htm Bus Hound is a software product for capturing device data transfers and protocol. Bus Hound can also b...

2020-07-05 10:32:18 7 0

原创 usb PHY linux驱动

本文以imx6ulSoC为例。 涉及目录及文件: dts: linux-4.14.141\arch\arm\boot\dts\imx6ul.dtsi controller: drivers\usb\chipidea phy: drivers\usb\phy ...

2020-07-05 10:30:13 11 0

原创 Marvell 88E1111 linux driver

The Alaska® Ultra 88E1111 Gigabit Ethernet Transceiver is a physical layer device for Ethernet 1000BASE-T, 100BASE-TX, and 10BASE-T applications. ...

2020-07-05 10:19:18 12 0

原创 编译uboot

website home: http://www.denx.de/wiki/U-Boot/WebHome doc: http://www.denx.de/wiki/U-Boot/Documentation download: ftp://ftp.denx.de/pub/u-boot/ ...

2020-06-05 17:08:27 46 0

原创 ARM内存屏障 (memory barrier)

barrier.h #define isb() asm volatile("isb" : : : "memory") #define dmb(opt) asm volatile("dmb " #opt : : : ...

2020-06-05 17:05:30 115 0

原创 SRAM和DRAM

RAM有两大类,一种称为静态RAM(StaticRAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM...

2020-06-05 17:01:17 57 0

原创 netdev: dev_watchdog timer(结合stmmac 分析)

分析netdev看门狗定时器 1. dev_watchdog()作为定时器回调函数会被周期执行 在dev_watchdog()中,如果 if (netif_xmit_stopped(txq) && time_after(jiffies, (trans_start + dev...

2020-06-05 17:00:03 217 0

原创 stmmac 中断处理

1.发送中断 1.1.DMA发送完数据后产生中断,调用 stmmac_interrupt服务程序 1.2. stmmac_interrupt通过调用stmmac_dma_interrupt处理DMA相关中断(包括发送和接收)。在stmmac_dma_interrupt中,通过NAPI机制触...

2020-06-05 16:56:35 76 0

原创 dwmac ethernet driver(stmmac)

1. 官方介绍 stmmac which is the official driver for Synopsys Ethernet QoS 10/100/1000 and QoS IP in Linux. The cstmmac driver was originally developed ...

2020-05-09 16:18:28 397 0

原创 make modules 和 make modules_install

1. make modules 如:make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules 直接make,不加任何参数,就是make all,包含make modules。 make modules是单独编译模块,驱动被配置成M的都是...

2020-05-09 16:15:03 365 0

原创 build linux kernel

一、首先安装toolchains 1.download Linarotoolchains Linarotoolchains是由Linaro公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesyste...

2020-05-09 16:12:39 67 0

原创 基于busybox构建rootfs
原力计划

它整合了许多Linux上常用的工具和命令(utilities), 如rm, ls, gzip, tftp等。对于这些工具和命令,busybox中的实现可能不是最全的,但却是最常用的,因此它的特点就是短小精悍,特别适合对尺寸很敏感的嵌入式系统。 官网:https://busybox.net/ ...

2020-05-09 16:05:27 154 0

原创 buildroot简介

buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot menuconfig配置,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含...

2020-05-09 15:54:08 87 0

原创 ethtool编译与内核实现介绍

ethtool 是用于查询及设置网卡参数的命令。 使用ethtool需要两个条件: 1)网卡驱动支持ethtool,实现了ethtool的接口函数 2)用户控件安装ethtool可执行程序 dwmac驱动已在stmmac_ethtool.c中实现了相关函数,现在我们只需要在编译etht...

2020-04-06 17:44:48 117 0

原创 网卡驱动:stmmac DMA接收流程

1. dmabuffer及zero-copy 在打开网卡时,stmmac_init_rx_buffers()函数负责分配dmabuffer。 static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc...

2020-04-06 17:39:04 339 0

原创 网卡驱动:stmmac DMA发送流程

1. 设置DAMbuffer&descriptor,并启动DMA发送 在stmmac_xmit设置buffe r& descriptor,如下片段: if (likely(!is_jumbo)) { bool last_segment = (nfra...

2020-04-06 17:36:19 286 0

原创 linux kernel: defconfig和.config

在Linux内核里,编译内核文件时,先要配置.config文件,然后Makefile在编译时通过读取.config文件的配置来选择要编译的文件,选择驱动的加载方式。 defconfig 一般在arch/arm64/configs/目录下,是一个没有展开的内核配置,需要配合Kconfig展...

2020-04-06 17:31:20 361 0

原创 X server

X server是Linux系统里面图形接口服务器的简称。Windows系统的界面是这个系统不可分割的一部分,各种窗口操作界面显示都是由系统核心直接管理的,而Linux的图形界面并不是系统的必要组成部分,它可以在无界面的条件下运行。当需要Linux提供界面的时候,系统就会建立一个或者数个X ser...

2020-04-06 17:27:26 151 0

原创 VisualSVN

官网: https://www.visualsvn.com/ VisualSVN Server是免费的,而VisualSVN是收费的。 VisualSVN是SVN的客户端,和Visual Studio集成在一起。 VisualSvn Server是SVN的服务器端,包括Subversio...

2020-03-01 11:22:28 103 0

原创 在命令行中打开远程端的图形应用程序

X server是Linux系统里面图形接口服务器的简称。Windows系统的界面是这个系统不可分割的一部分,各种窗口操作界面显示都是由系统核心直接管理的,而Linux的图形界面并不是系统的必要组成部分,它可以在无界面的条件下运行。当需要Linux提供界面的时候,系统就会建立一个或者数个X ser...

2020-03-01 11:20:27 105 0

原创 dwc3 linux usb3.0 driver架构

1. DRD driver DRD驱动在usb/dwc3 1.1 dts dwc3@44000000 { /* Compatible ID used by the Linux driver for this kind of device */ compatible = ...

2020-03-01 11:14:09 1886 0

原创 芯片:设计、制造、封测

生产半导体产品的过程,包括设计、制造、封测三大环节。 1、IC设计:是一个将系统、逻辑与性能的设计要求转化为具体的物理版图的过程,主要包含逻辑设计、电路设计和图形设计等。将最终设计出的电路图制作成光罩,进入下一个制造环节。由于设计环节主要通过计算机完成,所需的设备占比较少。 2、IC制造:...

2020-03-01 11:09:07 878 0

原创 半导体IP核

1.简介 IP 核(Intellectual Property Core,知识产权核)是指在半导体集成电路设计中那些可以重复使用的、具有自主知识产权功能的设计模块,设计公司无需对芯片每个细节进行设计,通过购买成熟可靠的IP方案,实现某个特定功能,这种类似搭积木的开发模式,缩短了芯片开发的时间,提...

2020-03-01 11:06:19 941 0

原创 内核中引发bug并打印信息

1.dump_stack() 会打印函数调用栈,然后继续往下执行 2. BUG() or BUG_ON() 会打印函数调用栈和寄存器上下文信息,不会继续往下执行 3. panic() 会打印函数调用栈和寄存器上下文信息,且系统会挂起(无任何响应,表现为卡死,但没有重启) ...

2020-02-05 11:41:36 115 0

原创 local_irq_save和 local_irq_disable

1. 关中断 可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 <asm/system.h>中: void local_irq_save(unsigned long flags); void local_irq_disable(void); ...

2020-02-05 11:40:35 208 0

原创 jenkins

Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。 它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测...

2020-02-05 11:38:28 117 0

原创 获取函数调用堆栈

int backtrace(void **buffer,int size) 该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size 用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小。 ...

2020-02-05 11:35:53 203 0

原创 中断底半部:softirq、tasklet、workqueue

为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个平衡点,Linux 将中断处理程序分解为两个半部:顶半部(top half)和底半部(bottom half)。 顶半部完成尽可能少的比较紧急的功能,它往往只是简单地读取寄存器中的中断状态并清除中断标志后就进行“登记中断”的工作。“登...

2020-02-05 11:26:32 87 0

原创 docker安装ubuntu镜像

在docker中安装Ubuntu。 1.查找ubuntu镜像 docker search ubuntu 2.安装 docker pull ubuntu 3.查看镜像 docker images baoli@ubuntu:~$ sudo docker images REP...

2020-01-12 21:03:43 178 0

原创 Ubuntu16.04安装docker

官网: https://docs.docker.com/get-started/ https://hub.docker.com/ https://docs.docker.com/install/linux/docker-ce/ubuntu/ 一、安装 1.更新 ...

2020-01-12 20:58:15 57 0

原创 Linux进程和线程

程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行。进程则是运行着的程序,是操作系统执行的基本单位。线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位。 1. 程序和进程 C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。...

2020-01-12 20:53:25 107 0

原创 软件高内聚低耦合

1. 耦合 耦合就是元素之间依赖的量度。这里所说的元素,即可以是功能、对象(类),也可以指系统、子系统、模块。低耦合就是要求在我们的软件系统中,某元素不要过度依赖于其它元素。“低耦合”给软件项目带来的优点是:易于变更、易于重用。 耦合性也叫块间联系,指软件系统结构中各模块间相互联系紧密程度的一...

2020-01-12 20:49:51 94 0

原创 linux进程调度机制

Linux系统是抢占式多任务操作系统,是否要将一个进程立刻投入运行(也就是抢占当前进程),完全由该进程的优先级和是否有时间片来决定。但CFS调度器:抢占时机取决于新的可执行程序消耗了多少处理器使用比,如果消耗的使用比当前进程小:新程序立刻投入运行,抢占当前进程,否则推迟。 在Linux中,线程是...

2020-01-12 20:46:43 79 0

原创 kernel并发控制:自旋锁、互斥体、中断屏蔽

1.中断屏蔽(关中断) 在单 CPU 范围内避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断。 CPU 一般都具备屏蔽中断和打开中断的功能,这项功能可以保证正在执行的内核执行路径不被中断处理程序所抢占,防止某些竞态条件的发生。具体而言,中断屏蔽将使得中断与进程之间的并发不再发生,而且,由...

2019-12-01 10:56:01 135 0

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