Linux系统
文章平均质量分 86
落尘纷扰
服务于制造业的码农,没怎么写过代码
展开
-
ubuntu 18.04 touchpad right-click not enabled
1, install gnome-tweak-toolsudo apt-get install gnome-tweak-tool2. open gnome tweak tool. Then in ‘Keyboard & Mouse’ -> ‘Mouse Click Emulation’, there are 3 options, select “Area”.3. done....原创 2020-02-22 23:51:52 · 470 阅读 · 0 评论 -
标准库是如何发起系统调用的
应用程序在发起某个系统调用时,是先调用标准库中的同名函数,标准库再根据不同体系结构来选择特定的方式陷入内核。以socket库函数为例(以下均为uClibc中的实现),来说明标准库是如何一步步解析系统调用名并进入内核的:socket系统调用号:#define __NR_socket (4000 + 183)socket()函数的实现就是下面的函数:_syscall3(int, socket, int,原创 2017-10-15 22:10:00 · 1045 阅读 · 0 评论 -
Linux下修改文件属性 —— chattr和lsattr命令介绍
1. 介绍chattr可用于修改Linux文件系统上的文件属性。例如,使用chattr将某个文件设置为’i’属性(不可修改),则即使在root用户下给文件chmod成777模式,也是无法修改、删除和重命名的。可借助这个命令对某些文件进行锁定。chattr可作用于文件或目录。相应的,lsattr命令用于打印文件的属性。2. chattr命令2.1 选项-R 递归地作用原创 2018-01-22 10:36:46 · 13748 阅读 · 0 评论 -
Linux中的SysRq魔术键
1. SysRq介绍我第一次接触到SysRq是由于硬件同事调试时突然发现串口打印了HELP信息,还以为软件出问题了,我就去了解了一下SysRq。而我真正用上SysRq是为了破解一个禁止了所有命令的系统……(很有帮助哈哈)。SysRq是Linux提供的一个“Magic System Request Key”,它可以在系统出现故障的时候协助恢复和调试系统。只要你的虚拟终端或串口还可以接收键盘输原创 2018-01-16 23:56:56 · 17157 阅读 · 0 评论 -
Linux内存管理 —— 文件系统缓存和匿名页的交换
1. swap的含义在Linux里swap有两个意思: 1. 动词:交换。内存和磁盘的颠簸行为。 2. 名词:硬盘的swap分区。没有文件背景的页面,即匿名页(anonymous page),如堆,栈,数据段等,不是以文件形式存在,因此无法和磁盘文件交换,但可以通过硬盘上划分额外的swap交换分区或使用交换文件进行交换。即上面wap作为名词的意思。Swap分区可以将不活跃的页交换到硬盘...原创 2018-03-06 18:27:22 · 16914 阅读 · 3 评论 -
Linux内存管理 —— DMA和一致性缓存
1. 出现内存不一致的原因CPU写内存的时候有两种方式: 1. write through: CPU直接写内存,不经过cache。 2. write back: CPU只写到cache中。cache的硬件使用LRU算法将cache里面的内容替换到内存。通常是这种方式。DMA可以完成从内存到外设直接进行数据搬移。但DMA不能访问CPU的cache,CPU在读内存的时候,如果cache命中...原创 2018-03-06 18:34:30 · 27367 阅读 · 6 评论 -
Linux内核中的锁
1. 为什么要保证原子性处理器分两种:cisc(复杂指令集,可以直接在内存上进行操作,如x86,一条汇编指令可以原子的完整读内存、计算、写内存)和rics(精简指令集,所有操作都必须是在CPU内部进行。所以你想给内存某个变量做加法,你要先用load指令把内存load到CPU的寄存器、再执行add,再执行store把结果放到内存中)。因此a++这句话在rics上并不是原子的,必须翻译成一个r...原创 2018-03-07 00:05:34 · 6516 阅读 · 0 评论 -
Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE
本文都是假设系统是32位,页大小为4KB,基于ARM架构(不过和体系结构相关的内容不多)。1. 了解MMU在启用MMU的Linux内核中,CPU是通过虚拟地址来访问物理内存的。MMU(Memory Management Unit),即内存管理单元,它集成在CPU中,负责虚拟地址到物理地址的映射,以及物理地址的访问,并提供内存访问权限检查机制,以达到内存保护的作用(ARM里面的MPU(M...原创 2018-03-06 17:12:32 · 2246 阅读 · 1 评论 -
Linux内存管理 —— 内核态和用户态的内存分配方式
1. 使用buddy系统管理ZONE我的这两篇文章buddy系统和slab分配器已经分析过buddy和slab的原理和源码,因此一些细节不再赘述。所有zone都是通过buddy系统管理的,buddy system由Harry Markowitz在1963年提出。buddy的工作方式我就不说了,简单来说buddy就是用来管理内存的使用情况:一个页被申请了,别人就不能申请了。通过/proc/b...原创 2018-03-06 17:36:04 · 14941 阅读 · 0 评论 -
Linux内存管理 —— 进程的虚拟地址空间和VSS
1. 进程虚拟地址空间进程的虚拟地址空间记录在其task_struct结构的指针成员mm中(struct mm_struct),这是用户态进程才有的,里面包含pgd、代码段、堆、栈地址等信息。(kernel不需要mm,因为kernel不需要引用动态库,内核线程有自己的栈空间,虚拟地址映射关系也是全局可见的,注意vmalloc和kmap产生的映射是由内核中的全局变量swapper_pg_dir和...原创 2018-03-06 17:47:07 · 1486 阅读 · 0 评论 -
CPU是如何访问到内存的?--MMU最基本原理
本文转载于:http://mp.weixin.qq.com/s/SdsT6Is0VG84WlzcAkNCJA Linuxer微信公众号假设页表只有一级对于一个有MMU的CPU而言,MMU开启后,CPU是这样寻址的:CPU任何时候,一切时候,发出的地址都是虚拟地址,这个虚拟地址发给MMU后,MMU通过页表来在页表里面查出来这个虚拟地址对应的物理地址是什么,从而去访问外面的内存条。MMU里面...转载 2018-03-06 18:04:23 · 9306 阅读 · 0 评论 -
Linux内核中的page migration和compaction机制简介
我们知道buddy容易产生内存碎片,内核中可以通过给页面设置迁移类型以及compaction机制来预防和处理内存碎片。内存页主要有下面三种类型: 1.可移动的(movable)。用户态申请。 2.可回收的(reclaimable)。文件系统的cache。 3.不可移动(unmovable)。内核申请用。可移动的页面,顾名思义就是在被分配之后,还可以改变在物理内存中的位置。只要更新一下...原创 2018-04-06 18:31:55 · 4952 阅读 · 0 评论 -
Linux内核中的内存屏障
编译器有时会对代码做一些优化,例如尝试在保证程序执行正确的前提下修改指令顺序或优化ldr/str指令,让程序执行地更快。但是编译器毕竟不能完全猜透人的心思,有时候它做的优化会导致程序运行不符我们的预期。因此,内核中提供了一些额外的函数,可以插在某段代码里,告诉编译器不要在这里做指令优化。这些函数分为两种:内存屏障:rmb(), wmb(), mb(),可以防止硬件上的指令重排。除了编译器,...原创 2018-04-30 19:07:16 · 4092 阅读 · 0 评论 -
Linux IO的buffer cache和page cache合并的原因
我先大概解释一下,这里“buffer cache”中的buffer指的是以前块设备层中用来缓存磁盘内容的结构,一个buffer大小就是磁盘中一个block的大小。这里“page cache”指的是文件系统层用于缓存读写内容的cache,因为这一层在设备层之上,因此和内核其他地方一样,以page为单位来管理。 我们看到free命令打印中,有的版本cached和buffers是分开的,有的版本是“c...转载 2018-04-30 19:17:48 · 2914 阅读 · 0 评论 -
Linux内核中负责回写脏页的线程
内核版本 3.0 和 3.4.35 (不同内核版本的回写机制不同哦~)Linux内核里负责回写脏页的线程称为flusher线程,它们以“flush-”+“设备名”来命名,例如”[flush-8:64]”(这里设备名是指用设备号拼接的字符串)。在BDI(即backing device info)模块初始化(default_bdi_init())时会创建”[sync_supers]”和”[bd...原创 2018-05-08 23:25:04 · 2215 阅读 · 0 评论 -
__attribute__((context())属性理解
原文:http://blog.chinaunix.net/uid-14528823-id-4284946.html另外还有一篇补充:内核工具 – Sparse 简介看spinlock的实现代码中,会发现有如下的实现:void __lockfunc _raw_spin_lock(raw_spinlock_t *lock) __acquires(lock);void __lockfunc...转载 2018-05-05 23:53:07 · 2146 阅读 · 0 评论 -
diff/patch命令以及quilt工具的使用
quilt命令具有生成补丁和应用补丁的功能,但它的优势是还可以作为管理补丁的工具。一个比较大的项目可能由不同开发者共同维护,其中很多修改都以补丁的方式提供,这些补丁可能存在依赖关系。quilt工具在源代码目录中生成一个patches/目录,里面存放所有可用的补丁,记录了所有patches的先后顺序,并提供了一系列操作这些补丁的命令。quilt以栈的形式管理补丁,最先打上的补丁位于栈底,最后打上的补丁位于栈顶(top)。打patch的动作称为push,取消补丁的动作称为pop。原创 2015-03-09 23:02:55 · 12370 阅读 · 0 评论 -
串口工具minicom的使用方法
minicom是一个用在Linux操作系统中的串口通讯工具,本文将介绍其用法。安装minicom:下载源码包,解压,正常的安装流程即可: ./configure make make install配置串口:如果是在虚拟机中安装的Linux,则需要先绑定串口设备,以配置VMWare为例: 虚拟机关闭的情况下,“你的虚拟机” -> settings -> Hardware -> Add… ->原创 2017-10-15 22:28:53 · 7597 阅读 · 0 评论 -
vim显示行号、语法高亮、自动缩进的设置
原文地址:http://blog.csdn.net/chuanj1985/article/details/6873830在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc 在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc在Red Hat Linux 中vim的配置文件存放在/etc目录中,配置文件名为vimrc转载 2015-04-04 23:45:15 · 904 阅读 · 0 评论 -
linux下提示 -bash: ******* :command not found
原文地址:http://blog.csdn.net/chuanj1985/article/details/6873717如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么首先就要考虑root 的$PATH里是否已经包含了这些环境变量。主要是这四个:/bin ,/usr/bin,/sbin,转载 2015-04-04 23:49:41 · 15831 阅读 · 0 评论 -
Linux协议栈-netfilter(5)-iptables
iptables是用户态的配置工具,用于实现网络层的防火墙,用户可以通过iptables命令设置一系列的过滤规则,来截获特定的数据包并进行过滤或其他处理。iptables命令通过与内核中的netfilter交互来起作用。我们知道netfilter通过挂在每个hook点上的hook函数来过滤数据包,并且将过滤规则存放在几个表中供hook函数使用。相应的,iptables工具也定义了同样的几张规则原创 2015-04-04 22:36:15 · 4935 阅读 · 0 评论 -
Linux内核模块的编写方法和技巧
内核模块可以在不重新编译内核的情况下添加到内核代码中运行,其可以动态加载和卸载,因此可以根据需要将内核某些功能独立出来作为模块,而不是编译到内核中,这样可以减少内核大小,并且可以按照实际需求选择裁剪或添加某些内核功能。1. 编写一个内核模块需要先强调一个最基本的知识,内核模块是要运行在内核态的代码,所以编写内核模块需要包含的头文件都是内核中的头文件,使用的函数都是内核的函数。编写一原创 2015-04-12 12:44:46 · 4107 阅读 · 0 评论 -
Linux Kernel Documentation kbuild modules
内核源码目录下的Documentation/kbuild/modules.txt文件,详细介绍了模块的编写和编译的方法技巧。In this document you will find information about:- how to build external modules- how to make your module use the kbuild infrastru转载 2015-04-12 12:41:17 · 1790 阅读 · 0 评论 -
vim学习笔记
之前的一篇文章中提到在“use vim like a pro”中学习vim工具的使用,这里我记录了一些我经常用到的vim命令,做个笔记。####use vim like a pro#####vim shortcut key::q :q! :wq ZZ #exit current file:qa :qa! #exit all opened filesvimtutor原创 2015-03-06 23:09:57 · 580 阅读 · 0 评论 -
Linux sed命令的用法介绍
sed命令简介sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处原创 2017-01-02 00:44:37 · 14300 阅读 · 3 评论 -
Linux上的Shebang符号(#!)
原文地址:http://smilejay.com/2012/03/linux_shebang/ 使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?本文了将给你简单介绍一下Shebang(”#!”)这个符号。 首先,这个符号(#!)的名称,叫做”Shebang”或者”Sha-bang”(还有其他一些名称,不过我一般就用这两个)。 She转载 2017-02-13 00:12:58 · 3552 阅读 · 0 评论 -
GNU/Linux awk命令用法详解
本来计划年前写完的,结果现在才搞定,手册的内容一边翻一边实验,还有awk版本问题,又参考Effective AWK Programming对语法和示例做了些补充。终于写完了,大家元宵节快乐!AWK简介AWK是一门解释型的编程语言,它的名字来源于它的三位作者的姓氏:Alfred Aho,Peter Weinberger和Brian Kernighan。AWK能够应用于广泛的计算和数据处理任务。所有的...原创 2017-02-11 21:34:54 · 10755 阅读 · 1 评论 -
OpenWrt netifd学习笔记
Netifd简介Netifd是OpenWrt中用于进行网络配置的守护进程,基本上所有网络接口设置以及内核的netlink事件都可以由netifd来处理完成。 在启动netifd之前用户需要将所需的配置写入uci配置文件/etc/config/network中,以告知netifd如何设置这些网络接口,如IP地址、上网类型等。如果在netifd运行过程中需要修改配置,则只需更新并保存/etc/c...原创 2017-07-11 18:08:33 · 27485 阅读 · 1 评论 -
ubuntu 14.04上Samba服务失败的问题
在ubuntu 14.04上配置好Samba后,在windows中可以看到samba中配置的共享文件夹,但是却打不开,被告知无法访问。您可能没有权限使用网络资源,请与这台服务器的管理员联系以查明您是否有访问权限,指定的网络名不再可用。转载 2017-06-24 22:31:32 · 1676 阅读 · 0 评论 -
Linux 虚拟文件系统(VFS)介绍
1. 通用文件模型Linux内核支持装载不同的文件系统类型,不同的文件系统有各自管理文件的方式。Linux中标准的文件系统为Ext文件系统族,当然,开发者不能为他们使用的每种文件系统采用不同的文件存取方式,这与操作系统作为一种抽象机制背道而驰。为支持各种文件系统,Linux内核在用户进程(或C标准库)和具体的文件系统之间引入了一个抽象层,该抽象层称之为“虚拟文件系统(VFS)”。VFS一方面提供一...原创 2016-05-27 21:40:20 · 17799 阅读 · 2 评论 -
Linux字符设备驱动
1. Linux设备类型Linux内核中的设备可分为三类:字符设备、块设备和网络设备。 字符设备(Character device):适合面向字符的数据交换,因其数据传输量较低。对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所以对这种设备的读写是实时的,如终端、磁带机、串口、键盘等。 块设备(Block device):是一种具有一定结构的随机存取设备,对这原创 2017-08-27 18:36:35 · 2488 阅读 · 0 评论 -
SMI(MDC/MDIO)总线接口介绍
SMI:串行管理接口(SerialManagement Interface),也被称作MII管理接口(MIIManagement Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:原创 2016-06-10 22:56:44 · 103704 阅读 · 6 评论 -
use vim like a pro
学习vim使用的一个很好的网址,在google上搜"use vim like a pro"就可以了。但是有的时候进不去,所以在这里备份一下~Use Vim Like A ProWhy Bother? (reasons)There are many other editors, some being quite excellent. There is no转载 2015-03-06 23:07:21 · 1632 阅读 · 0 评论