自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux虚拟地址按字节对齐:PAGE_ALIGN(addr)

本文参考Linux-4.1.15Linux通过PAGE_ALIGN(addr)将addr加大对齐到4096字节的边界(4096的整数倍),假设addr=4096+n,{0<n<4096},则PAGE_ALIGN(addr)=4096+4096PAGE_ALIGN这个宏在include/linux/mm.h中,/* to align the pointer to the (next) page boundary */#define PAGE_ALIGN(addr) ALIGN(a.

2021-07-11 11:05:56 1106

原创 NXP iMX6q平台QT移植路线

QT框架: 用户界面 QML/web等 中间层 C++ 底层应用 Linux 驱动 Driver 硬件 Hardware 路线1:yocto编译出QT文件系统->交叉编译QT应用->移植到板子yocto编译出的版本是5.6,而官方已找不到5.6的源码和SDK,考虑兼容性问题,放弃该路线路线2:yocto编译出最小系统->下载QT源码并编译QT文件系统->交叉编译QT...

2021-02-21 10:49:29 428

原创 在Ubuntu下使用qemu模拟运行arm Linux系统

1、在Ubuntu下安装qemu使用 sudo apt-get install qemu自动安装。(也可以自行下载qemu源码手动编译安装)安装完成后,系统可以识别qemu-开头的命令,也可以查看到qemu版本号。2、安装GNU交叉编译工具sudo apt-get install gcc-arm-linux-gnueabi也可自行到官网下载并安装CotexA系列https://developer.arm.com/tools-and-software/open-sourc...

2021-02-20 23:18:50 2056

原创 Linux源码神级编辑器vim+cscope插件

sudo apt-get install cscopecscope-indexer -r 递归生成索引信息文件(在工程源码首目录中执行)添加并编辑~/.vimrc (详见百度网盘)vim快捷操作:gg 移到文件首 G 移到文件尾 v 可视模式(移动光标可以选择多行) ctrl+v 可视块(列)模式(移动光标可以选择多行、多列) :cs f g start_kernel ->跳转到start_kern...

2021-02-17 21:34:09 447

原创 复杂指令集与精简指令集的原子操作

复杂指令集与精简指令集的原子操作以a++的动作为例:在精简指令集下,这个加法操作不是原子的,包括多个汇编步骤,典型的情况包括3个步骤:ldr、add、str,即读取内存数据到CPU寄存器,修改数据,将修改后的数据存入内存(读、修改、写,也叫做RMW原则),如下所示:在复杂指令集下,可以直接在内存上进行加减动作,一条add汇编指令即可完成,因此在单核情况下,这个a++的动作是原子的。但是,在多核情况下,a++的操作并不是原子的,因为你做a++之前,有可能被其它核上的高优先级线程抢占并.

2021-02-02 14:43:06 500

转载 Linux线程优先级翻转问题

https://www.cnblogs.com/kuliuheng/p/4080997.html

2021-01-30 11:05:14 338

转载 linux查看线程栈大小

https://www.cnblogs.com/luosongchao/p/3680312.html

2021-01-30 11:03:16 2037

转载 linux内存回收过程

参考:https://www.cnblogs.com/tolimit/p/5435068.htmlhttps://www.cnblogs.com/tolimit/

2021-01-22 17:16:22 161

转载 记录交叉编译时一个错误:fatal error: gnu/stubs-soft.h: No such file or directory

配置好makefile文件,执行make时,报错了,提示fatal error: gnu/stubs-soft.h: No such file or directory。如下图:查了网上一些做法:检查自己编译工具链,编译helloworld没有问题,那么问题就是出在编译选项。应该时不支持软件浮点编译所以编译选项由-mfloat-abi=softfp改为:-mfloat-abi=hard,编译通过。关于abi详细解析:(转自https://blog.csd...

2021-01-13 17:29:27 4850 1

原创 创建一个git 分支

1、查看当前的本地分支列表git branch -a2、添加一个本地分支testgit branchtest3、查看当前的本地分支列表,会发现多了一个test分支git branch -a4、查看当前的远程分支列表(没有test分支)git branch -r5、查看远程仓库名git remote假设上述查看到远程仓库名称为app6、将本地新加的test分支push到远程仓库 (git push <远程仓库名> <本地分支名>:<远.

2020-12-30 18:04:24 113

转载 zeroconf初步认识

原文:http://blog.cnnbboy.net/?cat=95最近对zeroconf协议进行了一系列深入的研究,深深地被这一技术折服,在1999年就出现的该协议,在技术的应用上已经走向成熟,走向向大众普及之路了。apple的airplay,airprint都是依赖了zeroconf的基础上,才展现出强大的功能。zeroconf介绍Zeroconf全称为Zero configuration networking,中文名则为零配置网络服务规范,是一种用于自动生成可用IP地址的网络技术,不需要

2020-12-22 10:54:38 2458

转载 Linux下io磁盘调度策略

I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。在linux下面列出4种调度算法CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq):这是默认算法,对于通用服务器来说通常是最好的选择。它试图均匀地分布对I/O带宽的访问。在多媒体应用, 总能保证audio、video及时从磁盘读取数据。但对于其他各类应用表现也很好。每个进程一个queue,每个queue按照上述规则

2020-12-15 09:44:38 644

转载 内核调试和系统调用劫持

如何在不重新编译内核,不rmmod内核模块的情况下修改系统调用为了解决这个问题,最终实现了两种解决方式:1.Linux系统调用劫持2.Kprobes内核调试技术(并非真正的修改)下面分别说下:Linux系统调用劫持:其实就是修改内核符号表,来达到一个劫持的作用。因为系统调用实际上是触发了一个0x80的软中断,然后转到了系统调用处理程序的入口system_call()。system_call()会检查系统调用号来得出到底是调用哪种服务,然后会根据内核符号表跳转到所需要调用的..

2020-12-14 10:40:05 349

转载 内核空间与用户空间的通信方式

内核空间与用户空间的通信方式下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象。1.使用API:这是最常使用的一种方式了A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。C.Copy_from_user()/copy_to_user():主要应用于设备驱动读写函数中,通过系统调用触发。2.使用p...

2020-12-14 10:00:00 1290

原创 IIC通信协议

I2C(Inter-Integrated CircuitBUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。经常IIC和SPI接口被认为指定是一种硬件设备,但其实这样的说法是不尽准确的,严格的说他们都是人们所定义的软硬结合体,分为物理层(四线结构)和协议层(主机,从机,时钟极性,时钟相位)。IIC,SPI的区别不仅在与物理层,IIC比SPI有着一套更为复杂的协议层定义。下面来分别说明一.

2020-12-11 14:13:41 1500

转载 SPI总线介绍

一、概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信. SPI 主要应用在 EEPROM, Fl...

2020-12-11 11:21:12 5705

转载 理解 Linux 的硬链接与软链接

Linux 的文件与目录现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性。为了便于文件的管理,Linux 还引入了目录(有时亦被称为文件夹)这一概念。目录使文件可被分类管理,且目录的引入使 Linux 的

2020-12-09 22:25:06 149

转载 [register]-ARM64重要寄存器介绍

文章目录 1、PSTATE aarch64的读写 2、PSTATE部分状态位的介绍 3、SPSR :Saved Program Status Registers 4、SCR_EL3, Secure Configuration Register 5、SCTLR_EL1, System Control Register (EL1) 6、TTBR1 TTBR0 Translation Table Base Register 7、ESR_EL3 ★★★ 友情链接 : 个人博客.

2020-12-07 10:41:24 2922

转载 linux file system 日志文件系统是怎样工作的

日志文件系统(Journal File System)解决了掉电或系统崩溃造成元数据不一致的问题,细节参见《日志文件系统是怎样工作的》,它的原理是在进行写操作之前,把即将进行的各个步骤(称为transaction)事先记录下来,包括:从data block bitmap中分配一个数据块、在inode中添加指向数据块的指针、把用户数据写入数据块等,这些transaction保存在文件系统单独开辟的一块空间上,称为日志(journal),日志保存成功之后才进行真正的写操作–把文件系统的元数据和用户数据写进硬盘(

2020-11-29 21:18:26 259

转载 Linux日志文件系统及性能分析

一、概述所谓日志文件系统是在传统文件系统的基础上,加入文件系统更改的日志记录,它的设计思想是:跟踪记录文件系统的变化,并将变化内容记录入日志。日志文件系统在磁盘分区中保存有日志记录,写操作首先是对记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,系统重启时,会根据日志记录来恢复中断前的写操作。在日志文件系统中,所有的文件系统的变化都被记录到日志,每隔一定时间,文件系统会将更新后的元数据及文件内容写入磁盘。在对元数据做任何改变以前,文件系统驱动程序会向日志中写入一个条目,这个条目描述了它将要

2020-11-29 20:41:26 714

转载 Linux 2.6 中的页面回收与反向映射

为什么要进行页面回收操作系统管理内存中的物理页面,同时也担任着内存分配的职责。应用程序可以通过内存分配函数向操作系统申请物理页面;在使用完这些物理页面之后,应用程序可以通过相应的内存释放函数释放这些物理页面。但是,对于内存中的某些物理页面来说,页面的使用者并不会主动释放它们,如果这些物理页面一直被占用而得不到释放,那么无论计算机上可用的物理内存有多少,物理内存迟早都有被用完的时候。所以,对于无法被主动释放的物理页面来说,操作系统就需要提供相应的功能去释放它们,Linux 中提供页面回收算法这样一种机制进

2020-11-28 21:27:23 135

转载 Linux 的文件与目录

Linux 的文件与目录现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性。为了便于文件的管理,Linux 还引入了目录(有时亦被称为文件夹)这一概念。目录使文件可被分类管理,且目录的引入使 Linux 的

2020-11-28 16:16:32 220

转载 Linux 线程模型的比较:LinuxThreads 和 NPTL

进行移植的开发人员需要了解的关键区别摘要当 Linux 最初开发时,在内核中并不能真正支持线程。但是它的确可以通过clone()系统调用将进程作为可调度的实体。这个调用创建了调用进程(calling process)的一个拷贝,这个拷贝与调用进程共享相同的地址空间。LinuxThreads 项目使用这个调用来完全在用户空间模拟对线程的支持。不幸的是,这种方法有一些缺点,尤其是在信号处理、调度和进程间同步原语方面都存在问题。另外,这个线程模型也不符合 POSIX 的要求。要改进 LinuxThre..

2020-11-27 00:13:52 219

转载 linux inode 详解 & 线上inode爆满解决方案

原文链接:https://www.cnblogs.com/jiangxiaoxian/p/9610903.htmllinux inode 详解 / 线上inode爆满解决方案本文大量参考阮一峰大神博客,整理笔记之所以写inode文章是由于一次线上问题,引发对inode深入的思考。磁盘的inode监控与磁盘空间的监控同等重要,线上服务器一定要做好磁盘inode与磁盘空间的监控。由于本人对linux研究有限,目前参考大量阮一峰大神博客整理而成。解决inode爆满问题一般inode爆

2020-11-26 13:58:25 396

转载 Linux内核调试的方式以及工具集锦

转载于:https://blog.csdn.net/gatieme/article/details/68948080CSDN GitHub Linux内核调试的方式以及工具集锦 LDD-LinuxDeviceDrivers/study/debug 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收.

2020-11-23 23:54:02 754

原创 Linux C中unsigned long与指针的关系

部分参考:https://www.cnblogs.com/dongguolei/p/7990892.html 理论上来讲 我觉得数据类型的字节数应该是由CPU决定的,但是实际上主要由编译器决定(占多少位由编译器在编译期间说了算)。常用数据类型对应字节数,可用如sizeof(char),sizeof(char*)等得出32位编译器: char :1个字节 char*(即指针变量):4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器就是...

2020-11-13 09:47:33 1988

原创 Brendan Gregg的博客,内核文档

http://www.brendangregg.com/blog/

2020-10-26 08:36:10 268

转载 Kernel Panic常见原因以及解决方法

https://www.cnblogs.com/cherishui/p/3881428.html

2020-10-16 18:56:23 789

转载 Linux内核如何创建一个新进程

Linux内核如何创建一个新进程进程描述进程描述符(task_struct)用来描述进程的数据结构,可以理解为进程的属性。比如进程的状态、进程的标识(PID)等,都被封装在了进程描述符这个数据结构中,该数据结构被定义为task_struct进程控制块(PCB)是操作系统核心中一种数据结构,主要表示进程状态。进程状态就绪态、运行态、睡眠态(深度睡眠、浅度睡眠)、停止态、僵尸态。fork()fork()在父、子进程各返回一次。在父进程中返回子进程的 pid,在子进程中返.

2020-10-16 13:32:15 221

原创 ncurses库移植到arm平台

1、从ncurses官网下载源码https://ftp.gnu.org/pub/gnu/ncurses/2、解压后进入源码目录,初始化交叉编译环境,imx6系列的CPU初始化方法如下:. /opt/fsl-imx-fb/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueab查看配置参数[email protected]$ echo $CONFIGURE_FLAGS --target=arm-poky-linux-..

2020-09-30 15:07:08 2116

转载 深入理解交叉编译(Cross Compile)

深入理解交叉编译(Cross Compile)首先你要了解一下,三个名词:"build, haost, target",和三元组。build:构建 gcc 编译器的平台系统环境,编译该软件使用的平台。host::是执行 gcc 编译器的平台系统环境,该软件运行的平台。target:是让 gcc 编译器产生能在什么格式运行的平台的系统环境,该软件处理的目标平台。三元组:架构-设备厂家-位一. build、host、target的三种组合build与host不同是交叉编译器;build与

2020-09-29 15:45:22 6751

转载 关于SQLite3 编译及交叉编译的一些问题

转自:http://blog.sina.com.cn/s/blog_5f2e119b0101ibwn.htmlSQLite3 (http://www.sqlite.org)是一个非常强大的小型开源数据库软件,特别嵌入到一些软件中存储数据,当然,移植到嵌入式系统上也是非常有必要的。众所周知的Symbian,Android, IOS这几大移动平台都是使用的sqlite作数据存储,使用SQLite的厂商包括Adobe, Airbus, Apple, Dropbox, Mozilla, GE, Google,

2020-09-29 15:43:44 952

转载 linux下编译upx 3.93(转)

昨天,UPX发布了3.93版本。UPX(the Ultimate Packer for eXecutables)是一个非常全面的可执行文件压缩软件,支持dos/exe、dos/com、dos/sys、djgpp2/coff、 watcom/le、win32/pe、rtm32/pe、tmt/adam、atari/tos、linux/i386等几乎所有平台上的可执行文件, 具有极佳的压缩比,还可以对未压缩的文件和压缩完后进行比较。1、准备源码包直接去github下载zip包或者直接克隆一下。.

2020-09-20 11:24:06 205

转载 值得推荐的c/c++开源框架与库

转载自:https://github.com/0voice/developkit_setc/c++的项目也是各种各样的都有,微电子,物联网,桌面客户端,游戏,服务器开发等等。开源框架种类繁多,有哪些值得推荐的c/c++开源框架与库?框架Apache C++ Standard Library: 是一系列算法,容器,迭代器和其他基本组件的集合ASL: Adobe源代码库提供了同行的评审和可移植的C++源代码库。Boost: 大量通用C++库的集合。BDE: 来自于彭博资讯实...

2020-09-11 14:36:44 3605 1

原创 printf家族介绍、strings命令介绍

printf家族#include<stdio.h>intprintf(constchar*format,...);//输出到标bai准输出intfprintf(FILE*stream,constchar*format,...);//输出到文件intsprintf(char*str,constchar*format,...);//输出到字符串str中intsnprintf(char*...

2020-09-11 14:28:55 86

原创 C库及库函数、系统调用

C库的分类、区别libc:Linux下的ANSI C函数库,是基本的C语言函数库,一般在各种IDE中都有集成。glibc:Linux下的GNU C函数库,是GNU旗下的C标准库,在linux系统的/lib目录下的名称为libc.so.6。glibc支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。可以参考:http://nieyong.github.io/wiki_ny/glibc,%20eglibc%E5%92%8C%20glib%E7%9A%84%E5%8C%BA%E5%88%AB.htm

2020-09-11 14:11:41 1546

转载 重构改善既有代码设计--重构手法01:Extract Method (提炼函数)

https://www.cnblogs.com/pony1223/p/7512741.html

2020-08-21 17:17:23 189

转载 java设计模式

JAVA设计模式总结之六大设计原则JAVA设计模式总结之23种设计模式

2020-08-21 17:16:40 78

转载 关于linux栈的一个深层次的问题

内存不用白不用,何必在一开始就限制栈的大小,linux的机制是尽量多尽量紧凑的使用虚拟内存,原则就是你现在不用我就用,没有预留的概念,当然你可以通过系统调用实现预留,就像glibc的堆管理那样,这里所说的完全是针对于操作系统内核的,用户空间程序完全可以向操作系统通过brk或者mmap实现用户空间的内存预留。windows的实现就不是这样,windows要求程序在运行之前就限制好栈使用的内存的大小,一旦超过这个大小,哪怕向下伸展的栈下方的内存没有实体使用,那么也会触发异常,windows将栈内存的使用完全暴露

2020-08-16 17:09:49 173

原创 理解 (*(void (*)())0)(),(*fp)(),fp(),*((*fp)()),*(fp())

指针函数与函数指针int *fp():fp表示一个函数(指针函数),其返回一个指向int类型的指针,本质是函数int (*fp)():fp表示一个函数指针,其指向的函数返回一个int型数据,本质是指针,该指针指向这个函数理解(*fp)(),fp(),*((*fp)()),*(fp())(*fp)(),fp()二者等价,后者是前者的简写,void (*fp)()表示返回值为void类型的函数指针,调用这个函数的时候用(*fp)(),也可简写成 fp()同理,*((*fp)()),*(.

2020-08-13 18:52:01 1331

vscode代码自动补全、跳转(离线安装插件) - cpptools-win32.zip

cpptools-win32.vsix,支持在无法连网的电脑上安装这个插件,使vscode可以自动跳转到变量、函数的声明、定义处,同时支持自动补全。安装完了,重启vscode就可以生效。

2020-04-30

空空如也

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

TA关注的人

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