自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张飞online博客

崇尚真诚,回避浮夸!

  • 博客(159)
  • 收藏
  • 关注

原创 Linux重定向 >file 2>&1 与 2>&1 >file 本质原理

不要被表面迷糊,当你傻傻分不清上、记不住这些命令不妨看下底层实现。1.dup2int dup2(int oldfd, int newfd);dup2的功能就是复制描述符,把old复制到new,所以结果就是old和new指向同一个描述符。 如果newfd已经打开,则先将其关闭。如果newfd等于oldfd,则dup2返回newfd, 而不关闭它。#include <string.h>#include <unistd.h>#include <fcntl.h&

2022-04-23 14:56:22 1618

原创 Linux网卡驱动一硬件原理篇

mdiorgmii驱动分析

2022-02-28 22:38:57 1921

原创 ARMv8之内存属性

普通内存设备内存#define MT_NORMAL 0#define MT_NORMAL_TAGGED 1#define MT_NORMAL_NC 2#define MT_DEVICE_nGnRnE 3#define MT_DEVICE_nGnRE 4/* * Memory types for Stage-2 translation */#define MT_S2_NORMAL 0xf#define MT_S2_DEVICE_nGnRE 0x1/* * Mem

2022-01-22 00:33:58 908

原创 为什么Uboot阶段要关MMU,关DCache、开ICache

我看了网上好多人的答案,大部分答案还是没有回答出为什么,以及开启的话可能面临的问题。最后一个问题是,为什么D-cache被禁用,而I-cache却可以开?为了加快仪器的运行速度?MMU可以决定哪些内存区域可以缓存,哪些不可以。如果你没有打开MMU,但你打开了数据缓存(如果可能的话,对于一些硬件压根从硬件上就不支持),那么你就不能安全地与外围设备交互。例如,如果你读取uart状态寄存器,就像其他数据操作一样,要经过缓存,无论该状态是什么,都会留在缓存中供以后的读取,直到该缓存行被驱逐,你才能再获得

2022-01-12 15:24:02 3503 5

原创 驱动ko文件开机自动加载配置

linux 驱动开机自动加载

2022-01-08 02:11:31 4877

原创 内核调试之early printk

early printk 解决什么问题那?本质也是打印调试信息,但是不同于printk,printk属于打印的一个框架,既然是框架必然需要一些必备条件,框架的初始化等,在内核启动初期这些框架都没来得及初始化,所以这些函数肯定不能用,eary pritnk实现就比较直接简单,就是直接调用对应芯片的串口寄存器,把数据写到串口控制器寄存器里面,只要你芯片启动了就能输出。各个架构下都实现了earlyprintkKernel hacking ---> arm Debugg...

2021-12-20 21:55:10 630

原创 PetaLinux Linux Uboot 源码路径

zynq

2021-11-20 01:26:05 3112

原创 Uboot从各种存储设备上(sd、mmc、nand、nor)加载内核命令

load zImage, dtb, and rootfs to RAMset bootargs for linuxbootz zImage_addr rootfs_addr dtb_addr, if don't need rootfs, please put "-"boot from emmc(ext4 format), emmc partition 2 exist rootfs.The U-Boot Documentation — Das U-Boot unknown version d.

2021-11-15 23:01:39 2220

原创 DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided、Dimm

DDR的Controller、Channel、Chip、Bank、Rank、Row、Column、Sided、Dimm

2021-11-05 01:46:23 12426 1

原创 linux下彻底关闭磁盘记录日志

有时候因为一些硬件或者驱动bug,导致操作系统频繁的打印日志,最后会导致/var/log占满,临时的解决方案就是关闭linux下的日志,基本上就是几条命令:在许多操作系统上,Syslog 已被 rsyslog 取代。因此,在 Debian > 5、Ubuntu > 11.2、Centos 6.x 上,以下命令行将停止它:关闭 krn.log 和 syslogservice rsyslog stop然后,您可以在启动时禁用它:systemctl disable rs...

2021-10-20 12:44:23 3047

原创 linux内核调试之PRINTXXX

1.printxxx是最简单也是最有效的调试方式。printkhttps://elixir.bootlin.com/linux/latest/source/include/linux/printk.h#L389/*自定义*/#define pr_fmt(fmt) "CPU features: " fmt/** * pr_emerg - Print an emergency-level message * @fmt: format string * @...: arguments fo

2021-10-16 02:45:26 421

原创 Linux内核模块调试一

在windows 下编程最舒服的就是其面向事件的线程同步互斥机制,在最开始的时候我就考虑一个问题,事件会不会丢失?其实对于会不会丢失要看他的底层实现机制,如果底层是一个队列当然不会丢失,底层要仅仅是一行位图,那写100次1和写1一次1的区别就是你的识别够不够快,你能不能辨别出这个1变化了一百次。...

2021-09-30 02:29:35 1931

原创 linux内核启动参数

先看官方文档:https://elixir.bootlin.com/linux/latest/source/Documentation/admin-guide内存相关的启动参数基本分为俩类,驱动模块和系统本身。1.内存相关的启动参数:mem=nn[KMG]其中KMG 是单位对应KB MB 和GB ,这个参数的意思是明确linux可用内存范围,例如mem=1024M表示linux内存可使用1024M,并且是从0开始,mem=size@start_addr这种写法其实内核文档并没有说,可能.

2021-09-08 18:02:12 729

原创 linux下的各种c库

一:起源 对于内核kfifo的分析源于工作,去年我配合fpga工程师写一个多路的PCIE的DMA驱动,由于性能要求,需要对DMA回来的数据解析分包,存储到后端存储设备中。我的设计方案是解析后将各个通道打到各个通道的队列中,队列的设计考虑到性能,我想了很久。首先想到了环形队列,环形队列的好处是,我申请一块内存占着,可以反复使用,当然这也是他的缺点,看具体的业务场景了。...

2021-06-21 20:31:44 579

原创 本地搭建的gogs 异常的慢

本地搭建的gogs 异常的慢速度差这么多??原因是??-------试试关闭360.!!!

2020-12-15 23:58:18 1875 6

原创 FPGA PCIE驱动,windriver驱动 wdf驱动 windows linux PCIE DMA驱动 支持win10 server2016

一:相关介绍 本人一直从事fpga pcie dma驱动开发,可以开发windwos Linux原生驱动 wdf 或者基于第三方库的windriver。支持win10 win server。提供稳定的驱动库,或者源码,开发者可以不关心底层驱动直接使用封装的库。二:PCIE 驱动开发的稳定性和高效性:本驱动库均已经进行了实际交付使用,通过了严格的jun...

2020-12-14 23:24:42 3386 2

原创 Lwip 奔溃掉线内存申请不出来也许大部分是竞争问题!

系列文章目录提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录目录系列文章目录文章目录前言一、程序架构二、Bug所在三、修复bug总结前言这段时间接手一个使用lwip的项目,各种不稳定,异常crash、内存申请不出来、ping不通。当然我使用的版本比较老,本身也有bug,这个可以网上找找,但是这篇博客肯定不是谈这些。当你已经按照网友修复了各种bug,他依旧不稳定。其实对程序而言,一个程序行为诡异,往往和竞争...

2020-12-06 01:03:41 3359 3

原创 20201024Mark一下

20201024Mark一下

2020-10-23 22:55:38 144

原创 V4L2视频框架那些事

V4L2视频框架那些事

2020-07-10 19:25:58 134

原创 linux设备树——设备树dts语法

设备树那些事——设备树dts语法

2020-05-10 09:55:55 463

原创 设备树那些事一

设备树的引入目的设备树的加载过程设备树在驱动中的使用

2020-04-18 23:24:35 399

原创 linux内核启动流程(基于arm)——head.S

源码路径:https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/compressed/head.Sstart: .type start,#function mov r7, r1 @ save architecture ID mov r8, r2 @ save atags pointer#i...

2020-02-23 23:57:31 433

原创 gdb调试死锁的正确姿势

gdb搞起这是我们的源码:#include <unistd.h> #include <pthread.h> #include <string.h> pthread_mutex_t lock_a = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t lock_b = PTHREAD_MUTEX_INITIA...

2020-02-19 22:28:33 1334

原创 Linux多线程编程之——线程生命周期

特别说明,本文有参考www.yomocode.com阅码场课程,宋宝华老师课程。

2020-02-15 17:57:02 251

原创 Linux 驱动之字符设备驱动分析

字符设备驱动框架应该是我们最常见的一种驱动框架。废话少说,撸源码。涉及到的源码路径:https://elixir.bootlin.com/linux/latest/source/fs/char_dev.chttps://elixir.bootlin.com/linux/latest/source/include/linux/cdev.h主要涉及到的函数是下面这几个,源码也一并贴...

2020-02-12 10:35:15 236

原创 Linux中断那些事(一)

https://blog.csdn.net/vito_bin/article/details/52986011

2020-01-20 15:25:58 143

原创 linux下如何发布驱动ko文件,不泄露源码,源码编译为中间目标文件,发布平台再编译

linux下的驱动在插入到内核会校验内核版本和当前驱动版本,只有完全匹配才可以插入成功。当然这也做的目的是安全确保当前驱动和当前内核是匹配的,但是大部分情况下我们发布的驱动只是和用户内核在小版本上有区别不会影响真实的使用。但是由于版本不一致导致驱动无法安装。解决这个一般都方法是,1.发布源码,用户自己编译。2.根据用户内核我们使用相同内核,编译驱...

2020-01-16 19:00:57 797

原创 好的代码注释究竟应该是什么样的?!!!

先看段子://写这段代码的时候,只有上帝和我知道它是干嘛的//现在,只有上帝知道// 神奇。勿动。 我们讨论好的代码究竟应该是什么样的?,是密密麻麻的注释,看着中英文夹杂,恶心至极。还是什么都没有,我认为更应该偏向于后者,但是后者很难做到,好的代码注释应该是在二者之间吧。 首先应该强调的就是错误的认识,总是有一些人在乱说,胡乱传递,人云亦云。诸如我经常听到的一...

2019-12-27 13:24:46 368

原创 谈谈linux中的对齐

linux 中有太多的宏 ,这篇主要写写对齐。

2019-11-30 10:52:48 571 1

原创 QString 的arg格式化字符串性能让人吐槽

一般来说我们不会关注这些东西,但是在特定场合就显得尤为重要,比如我们现在的场景,sql语句构建这样的一个主频下:我们构建一个27个字段的sql语句32768次,耗时大概是4s,而数据库的插入的耗时也就3s,这个 时候显然影响非常大,或者说让人吐槽。sprintf的性能,我使用sprinf测试了一下,一样的情景耗时是100ms。...

2019-10-26 16:04:26 580

转载 IA32中的5种caching type(也叫memory type)

转https://blog.csdn.net/witsmakemen/article/details/18360399

2019-09-20 16:04:17 227 3

原创 多线程设计模式

https://www.cnblogs.com/feng9exe/p/8352113.html

2019-09-12 13:39:57 385

原创 正确的QTTCP QTcpSocket与多线程的交互方式应该是这样的!!!

1.首先说不正确的姿势是什么?跨线程乱搞,重新写了qthread,实现了run,然后man里面创建了QTcpSocket,然后传入到run里面。这种基本运行的时候都会提示你跨线程调用了,对了还有人搞不懂为什么跨线程了,这个可以看看我的博客,有非常明确的说明https://blog.csdn.net/u013372900/article/details/81676483还有人强行调用...

2019-08-27 17:21:29 5911 5

原创 Linux下设置驱动实现非标准的波特率(最新版 struct termios2)

其实对于一般的波特率glibc里面已经封装了函数接口,而且非常容易的就可以设置。但是对于非标准的波特率网上有人提到了ioctl设置,但是最新的内核已经弃用了这种方式,我设置的时候ioctl返回无效http://blog.chinaunix.net/uid-9543173-id-1988980我们的方法贴出来:#include <stdlib.h>#include &...

2019-07-19 17:18:27 2919 3

原创 Windwos驱动 PCIE开发第一步

环境搭建,目前做板卡驱动主要是windriver,但是就目前而言,大部分公司使用的是破解版的windriver,没有正当的版权,对于win10系统也不支持。windows原生驱动是wdf,开发难度其实也没有那么大,当然你要了解底层。代开发 :https://blog.csdn.net/u013372900/article/details/97004166好了我们正式说开发环...

2019-05-30 16:06:13 1994 2

原创 关于c/c++中的volatile、内存屏障以及无锁数据结构

一:先说 volatile,静态乱序 C/C++语言中的volatile关键字作用? 1.易变性:volatile告诉编译器,某个变量是易变的,当编译器遇到这个变量的时候,只能从变量的内存地址中读取这个变量,不可以从缓存、寄存器、或者其它任何地方读取。 2.顺序性:两个包含volatile变量的指令,编译后不可以乱序。注意是编译后不乱序,但是在执行的过程中...

2019-04-01 17:39:14 1128

原创 linux中断

linux中断

2019-02-28 13:32:00 155

原创 中断和查询NAPI

转载  https://blog.csdn.net/hejin_some/article/details/72722555 概述 NAPI是Linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入。简单来说,NAPI是综合中断方式与轮询方式的技术。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点...

2019-01-29 13:49:37 680

原创 2019再启程

2019再启程

2019-01-21 14:10:09 209 2

转载 线程私有数据 ——TSD

转载 :https://blog.csdn.net/zjf280441589/article/details/43883033 线程特定数据int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *));int pthread_key_delete(pthread_key_t key); in...

2018-12-18 15:10:32 229

空空如也

空空如也

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

TA关注的人

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