<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[caotuo_csdn的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/caotuo_csdn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; caotuo_csdn]]></copyright><item><title><![CDATA[Linux虚拟地址按字节对齐：PAGE_ALIGN(addr)]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/118643306</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/118643306</guid><author>caotuo_csdn</author><pubDate>Sun, 11 Jul 2021 11:05:56 +0800</pubDate><description><![CDATA[本文参考Linux-4.1.15

Linux通过PAGE_ALIGN(addr)将addr加大对齐到4096字节的边界（4096的整数倍），假设addr=4096+n，{0&lt;n&lt;4096}，则PAGE_ALIGN(addr)=4096+4096

PAGE_ALIGN这个宏在include/linux/mm.h中，


/* to align the pointer to the (next) page boundary */
#define PAGE_ALIGN(addr) ALIGN(a.]]></description><category></category></item><item><title><![CDATA[NXP iMX6q平台QT移植路线]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113914890</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113914890</guid><author>caotuo_csdn</author><pubDate>Sun, 21 Feb 2021 10:49:29 +0800</pubDate><description><![CDATA[QT框架：


			用户界面
			
			QML/web等
		中间层
			C++
		底层应用
			Linux
		驱动
			Driver
		硬件
			Hardware
		











路线1：

yocto编译出QT文件系统-&gt;交叉编译QT应用-&gt;移植到板子

yocto编译出的版本是5.6，而官方已找不到5.6的源码和SDK，考虑兼容性问题，放弃该路线

路线2：

yocto编译出最小系统-&gt;下载QT源码并编译QT文件系统-&gt;交叉编译QT...]]></description><category></category></item><item><title><![CDATA[在Ubuntu下使用qemu模拟运行arm Linux系统]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113886203</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113886203</guid><author>caotuo_csdn</author><pubDate>Sat, 20 Feb 2021 23:18:50 +0800</pubDate><description><![CDATA[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...]]></description><category></category></item><item><title><![CDATA[Linux源码神级编辑器vim+cscope插件]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113838373</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113838373</guid><author>caotuo_csdn</author><pubDate>Wed, 17 Feb 2021 21:34:09 +0800</pubDate><description><![CDATA[sudo apt-get install cscope

cscope-indexer -r 递归生成索引信息文件（在工程源码首目录中执行）

添加并编辑~/.vimrc （详见百度网盘）

vim快捷操作：

gg
			移到文件首
		G
			移到文件尾
		v
			可视模式（移动光标可以选择多行）
		ctrl+v
			可视块（列）模式（移动光标可以选择多行、多列）
		









:cs f g start_kernel -&gt;跳转到start_kern...]]></description><category></category></item><item><title><![CDATA[复杂指令集与精简指令集的原子操作]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113556098</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113556098</guid><author>caotuo_csdn</author><pubDate>Tue, 02 Feb 2021 14:43:06 +0800</pubDate><description><![CDATA[复杂指令集与精简指令集的原子操作

以a++的动作为例：





在精简指令集下，这个加法操作不是原子的，包括多个汇编步骤，典型的情况包括3个步骤：ldr、add、str，即读取内存数据到CPU寄存器，修改数据，将修改后的数据存入内存（读、修改、写，也叫做RMW原则），如下所示：



在复杂指令集下，可以直接在内存上进行加减动作，一条add汇编指令即可完成，因此在单核情况下，这个a++的动作是原子的。但是，在多核情况下，a++的操作并不是原子的，因为你做a++之前，有可能被其它核上的高优先级线程抢占并.]]></description><category></category></item><item><title><![CDATA[Linux线程优先级翻转问题]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113419065</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113419065</guid><author>caotuo_csdn</author><pubDate>Sat, 30 Jan 2021 11:05:14 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/kuliuheng/p/4080997.html
]]></description><category></category></item><item><title><![CDATA[linux查看线程栈大小]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113418912</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/113418912</guid><author>caotuo_csdn</author><pubDate>Sat, 30 Jan 2021 11:03:16 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/luosongchao/p/3680312.html
]]></description><category></category></item><item><title><![CDATA[linux内存回收过程]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/112991589</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/112991589</guid><author>caotuo_csdn</author><pubDate>Fri, 22 Jan 2021 17:16:22 +0800</pubDate><description><![CDATA[参考：

https://www.cnblogs.com/tolimit/p/5435068.html

https://www.cnblogs.com/tolimit/
]]></description><category></category></item><item><title><![CDATA[记录交叉编译时一个错误:fatal error: gnu/stubs-soft.h： No such file or directory]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/112577458</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/112577458</guid><author>caotuo_csdn</author><pubDate>Wed, 13 Jan 2021 17:29:27 +0800</pubDate><description><![CDATA[配置好makefile文件，执行make时，报错了，提示fatal error: gnu/stubs-soft.h: No such file or directory。

如下图:



查了网上一些做法：





检查自己编译工具链，编译helloworld没有问题，那么问题就是出在编译选项。应该时不支持软件浮点编译

所以编译选项由-mfloat-abi=softfp改为：-mfloat-abi=hard，编译通过。





关于abi详细解析：(转自https://blog.csd...]]></description><category></category></item><item><title><![CDATA[创建一个git 分支]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111995763</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111995763</guid><author>caotuo_csdn</author><pubDate>Wed, 30 Dec 2020 18:04:24 +0800</pubDate><description><![CDATA[1、查看当前的本地分支列表

git branch -a

2、添加一个本地分支test

git branchtest

3、查看当前的本地分支列表，会发现多了一个test分支

git branch -a

4、查看当前的远程分支列表（没有test分支）

git branch -r

5、查看远程仓库名

git remote

假设上述查看到远程仓库名称为app

6、将本地新加的test分支push到远程仓库 （git push &lt;远程仓库名&gt; &lt;本地分支名&gt;:&lt;远.]]></description><category></category></item><item><title><![CDATA[zeroconf初步认识]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111515306</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111515306</guid><author>caotuo_csdn</author><pubDate>Tue, 22 Dec 2020 10:54:38 +0800</pubDate><description><![CDATA[原文：http://blog.cnnbboy.net/?cat=95

最近对zeroconf协议进行了一系列深入的研究，深深地被这一技术折服，在1999年就出现的该协议，在技术的应用上已经走向成熟，走向向大众普及之路了。
apple的airplay，airprint都是依赖了zeroconf的基础上，才展现出强大的功能。

zeroconf介绍

Zeroconf全称为Zero configuration networking，中文名则为零配置网络服务规范，是一种用于自动生成可用IP地址的网络技术，不需要]]></description><category></category></item><item><title><![CDATA[Linux下io磁盘调度策略]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111191576</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111191576</guid><author>caotuo_csdn</author><pubDate>Tue, 15 Dec 2020 09:44:38 +0800</pubDate><description><![CDATA[I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理，以求得尽可能最好的整体I/O性能。
在linux下面列出4种调度算法
CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq)：

这是默认算法，对于通用服务器来说通常是最好的选择。它试图均匀地分布对I/O带宽的访问。在多媒体应用, 总能保证audio、video及时从磁盘读取数据。但对于其他各类应用表现也很好。每个进程一个queue，每个queue按照上述规则]]></description><category></category></item><item><title><![CDATA[内核调试和系统调用劫持]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111151658</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111151658</guid><author>caotuo_csdn</author><pubDate>Mon, 14 Dec 2020 10:40:05 +0800</pubDate><description><![CDATA[如何在不重新编译内核，不rmmod内核模块的情况下修改系统调用

为了解决这个问题，最终实现了两种解决方式：

1.Linux系统调用劫持

2.Kprobes内核调试技术（并非真正的修改）



下面分别说下：



Linux系统调用劫持：

其实就是修改内核符号表，来达到一个劫持的作用。因为系统调用实际上是触发了一个0x80的软中断，然后转到了系统调用处理程序的入口system_call()。system_call()会检查系统调用号来得出到底是调用哪种服务，然后会根据内核符号表跳转到所需要调用的..]]></description><category></category></item><item><title><![CDATA[内核空间与用户空间的通信方式]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111150607</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111150607</guid><author>caotuo_csdn</author><pubDate>Mon, 14 Dec 2020 10:00:00 +0800</pubDate><description><![CDATA[内核空间与用户空间的通信方式

下面总结了7种方式，主要对以前不是很熟悉的方式做了编程实现，以便加深印象。



1.使用API：这是最常使用的一种方式了

A.get_user(x，ptr)：在内核中被调用，获取用户空间指定地址的数值并保存到内核变量x中。

B.put_user(x，ptr)：在内核中被调用，将内核空间的变量x的数值保存到到用户空间指定地址处。

C.Copy_from_user()/copy_to_user()：主要应用于设备驱动读写函数中，通过系统调用触发。



2.使用p...]]></description><category></category></item><item><title><![CDATA[IIC通信协议]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111034052</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111034052</guid><author>caotuo_csdn</author><pubDate>Fri, 11 Dec 2020 14:13:41 +0800</pubDate><description><![CDATA[I2C(Inter-Integrated CircuitBUS) 集成电路总线，该总线由NXP（原PHILIPS）公司设计，多用于主控制器和从器件间的主从通信，在小数据量场合使用，传输距离短，任意时刻只能有一个主机等特性。

经常ＩＩＣ和ＳＰＩ接口被认为指定是一种硬件设备，但其实这样的说法是不尽准确的，严格的说他们都是人们所定义的软硬结合体，分为物理层（四线结构）和协议层（主机，从机，时钟极性，时钟相位）。

ＩＩＣ，ＳＰＩ的区别不仅在与物理层，ＩＩＣ比ＳＰＩ有着一套更为复杂的协议层定义。下面来分别说明一.]]></description><category></category></item><item><title><![CDATA[SPI总线介绍]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111031505</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/111031505</guid><author>caotuo_csdn</author><pubDate>Fri, 11 Dec 2020 11:21:12 +0800</pubDate><description><![CDATA[一、概述.
 SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信.
 SPI 主要应用在 EEPROM, Fl...]]></description><category></category></item><item><title><![CDATA[理解 Linux 的硬链接与软链接]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110942403</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110942403</guid><author>caotuo_csdn</author><pubDate>Wed, 09 Dec 2020 22:25:06 +0800</pubDate><description><![CDATA[Linux 的文件与目录

现代操作系统为解决信息能独立于进程之外被长期存储引入了文件，文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中，操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API，使他们被处理时均可统一使用字节流方式。换言之，UNIX 系统中除进程之外的一切皆是文件，而 Linux 保持了这一特性。为了便于文件的管理，Linux 还引入了目录（有时亦被称为文件夹）这一概念。目录使文件可被分类管理，且目录的引入使 Linux 的]]></description><category></category></item><item><title><![CDATA[[register]-ARM64重要寄存器介绍]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110795234</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110795234</guid><author>caotuo_csdn</author><pubDate>Mon, 07 Dec 2020 10:41:24 +0800</pubDate><description><![CDATA[文章目录


	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
	


★★★ 友情链接 : 个人博客.]]></description><category></category></item><item><title><![CDATA[linux file system 日志文件系统是怎样工作的]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110353909</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110353909</guid><author>caotuo_csdn</author><pubDate>Sun, 29 Nov 2020 21:18:26 +0800</pubDate><description><![CDATA[日志文件系统(Journal File System)解决了掉电或系统崩溃造成元数据不一致的问题，细节参见《日志文件系统是怎样工作的》，它的原理是在进行写操作之前，把即将进行的各个步骤（称为transaction）事先记录下来，包括：从data block bitmap中分配一个数据块、在inode中添加指向数据块的指针、把用户数据写入数据块等，这些transaction保存在文件系统单独开辟的一块空间上，称为日志(journal)，日志保存成功之后才进行真正的写操作–把文件系统的元数据和用户数据写进硬盘（]]></description><category></category></item><item><title><![CDATA[Linux日志文件系统及性能分析]]></title><link>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110352843</link><guid>https://blog.youkuaiyun.com/caotuo_csdn/article/details/110352843</guid><author>caotuo_csdn</author><pubDate>Sun, 29 Nov 2020 20:41:26 +0800</pubDate><description><![CDATA[一、概述

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