
linux
帮我起个网名
这个作者很懒,什么都没留下…
展开
-
从挂载fuse文件系统分析mount系统调用
mount系统调用的原型如下int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);其中source为设备文件的路径名,target为挂载...原创 2020-04-02 20:53:31 · 3115 阅读 · 0 评论 -
ubuntu18.04更换源后 update失败
ubuntu18.04更换为阿里源后,执行apt-get update,出现如下错误E: Failed to fetch http://mirrors.aliyun.com/ubuntu/dists/bionic/main/binary-arm64/Packages 404 Not Found [IP: 111.164.16.227 80]E: Failed to fetch http:/...原创 2020-04-01 14:14:04 · 3808 阅读 · 4 评论 -
Linux设备模型初始化——SCSI子系统初始化
Linux中scsi驱动框架在Linux中scsi驱动基本分为三大层:top level,middle level以及lower level。top level为具体的scsi设备驱动,例如我们常用的磁盘设备驱动就在该层(Linux中的实现为sd.c),scsi disk的驱动向上表现为块设备,因此,具有块设备的接口及一切属性,向下表现scsi设备,因为scsi disk基于scsi总线进行数据...原创 2020-03-04 14:22:35 · 1378 阅读 · 0 评论 -
Linux设备模型初始化——PCI子系统初始化
在《Linux设备模型初始化》一节介绍了由__define_initcall引入的几个初始化宏,PCI初始化过程就是由这些宏控制的,下面我们介绍PCI的初始化。首先就是优先级最高的postcore_initcall(pcibus_class_init),pcibus_class_init函数是PCI子系统第一个执行的初始化函数。在sys/class中注册pci_bus目录。static int...原创 2020-02-28 22:05:52 · 1013 阅读 · 0 评论 -
Linux设备模型初始化
Linux设备模型初始化Linux设备模型的最高层是subsystem,Linux中是利用decl_subsys和decl_subsys_name宏定义subsystem变量的,这两个宏的实现如下:#define decl_subsys(_name,_type,_hotplug_ops) struct subsystem _name##_subsys = { .kset = { .kob...原创 2020-02-27 14:17:35 · 352 阅读 · 0 评论 -
Linux设备驱动模型——总线、设备、驱动
总线内核所支持的每一种总线类型都由一个bus_type描述。因为bus_type结构体中定义了struct subsystem subsys,所以总线的级别处于subsystem,即总线的父结构也一定是一个subsystem。同时bus_type结构体中也定义了struct kset drivers和struct kset devices,这两个kset的父结构都是bus_type的struct...原创 2020-02-27 14:05:50 · 315 阅读 · 0 评论 -
Linux设备驱动模型——kobject、kset、subsystem的关系
kobjectLinux内核中有大量的驱动和设备,而这些驱动和设备往往具有类似的结构,根据面向对象的思想,我们就可以将这些共同的部分提取为父类,这个父类就是kobject,也就是驱动编程中使用的.ko文件的由来,而三大类设备驱动都需要包含这个kobject结构,也就是"继承"自kobject。一个kobject对象就对应sys目录中的一个设备,也可以理解为一个kobject就对应sys目录中的一...原创 2020-02-27 13:14:29 · 807 阅读 · 0 评论 -
中断和异常
中断向量Intel x86 系列微机共支持256 种向量中断,为使处理器较容易地识别每种中断源,将它们从0~255 编号,即赋予一个中断类型码 n,Intel 把这个8 位的无符号整数叫做一个向量,因此,也叫中断向量。所有256 种中断可分为两大类:异常和中断。异常又分为故障(Fault)、陷阱(Trap)和夭折(Abort),它们的共同特点是既不使用中断控制器,又不能被屏蔽。中断又分为外部可屏...原创 2020-02-13 15:30:14 · 1207 阅读 · 0 评论 -
非连续内存区管理
伙伴算法系统、slab分配器都是要求物理页框连续。buddy 分配器并不能完全消除页外碎片问题,为了应付可能的情况(指总空闲空间大于请求 大小,但空闲空间却不连续,这种情况 buddy 分配器没有办法处理),Linux 提供了一种机 制,称 vmalloc 分配器。它允许将不连续的物理空间映射到连续的虚地址空间。这个虚地址空间的描述符:struct vm_struct {unsigned lo...原创 2020-02-07 16:23:05 · 242 阅读 · 0 评论 -
slab分配器
Linux内核中基于伙伴算法实现的分区页框分配器适合大块内存的请求,它所分配的内存区是以页框为基本单位的。对于内核中小块连续内存的请求,比 如说几个字节或者几百个字节,如果依然分配一个页框来来满足该请求,那么这很明显就是一种浪费,即产生内部碎片(internal fragmentation)为了解决小块内存的分配,Linux内核基于Solaris 2.4中的slab分配算法实现了自己的slab分...原创 2020-02-06 20:20:22 · 395 阅读 · 0 评论 -
内存管理——伙伴系统算法
通常情况下,一个高级操作系统必须要给进程提供基本的、能够在任意时刻申请和释放任意大小内存的功能,就像malloc 函数那样,然而,实现malloc 函数并不简单,由于进程申请内存的大小是任意的,如果操作系统对malloc 函数的实现方法不对,将直接导致一个不可避免的问题,那就是内存碎片。内存碎片就是内存被分割成很小很小的一些块,这些块虽然是空闲的,但是却小到无法使用。随着申请和释放次数的增加,内...原创 2020-02-05 17:04:30 · 711 阅读 · 0 评论 -
内存寻址——分页
Linux中的分页分页单元把线性地址转换为物理地址,为了效率起见,线性地址被分成以固定长度为单位的组,成为页。这样页内部连续的线性地址被映射到连续的物理地址中。这样,内核就可以指定一个页的物理地址和其存取权限,而不用指定页所包含的全部线性地址的存取权限。分页单元把所有的RAM分成固定长度的页框(有时也叫做物理页)。每个页框包含一个页,也就是说一个页框的长度与一个页的长度一致。页框是主存的一部分...原创 2020-02-04 20:46:06 · 950 阅读 · 0 评论 -
内存寻址——分段
段描述符硬件中包含很多段,比如代码段、数据段等,每个段都由一个8字节的段描述符表示,段描述符存放在全局描述符表(GDT)或者局部描述符表(LDT)中,段描述符中的字段如下所示:注意其中的Type字段就描述了段类型,下面是Linux中采用的各种段描述符中每个字段的情况GDT地址和大小存放在gdtr控制寄存器中,LDT地址和大小存放在ldtr控制寄存器中Linux对gdt的定义如下Lin...原创 2020-02-04 20:25:39 · 375 阅读 · 0 评论 -
网络编程中的shutdown和close
1原创 2019-01-16 12:18:56 · 901 阅读 · 2 评论 -
解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。问题原因分析为了安装最新版本的Node.js(最新版本的Node.j...转载 2018-12-17 18:17:16 · 2021 阅读 · 0 评论 -
Linux Observability Tools大全
出自于http://www.brendangregg.com/blog/2014-08-23/linux-perf-tools-linuxcon-na-2014.html原创 2018-09-26 21:08:52 · 388 阅读 · 0 评论 -
Vim考本文本到另一个文件时出现E353: Nothing in register
引发问题出现的原因是~/.viminfo拥有者为root,因此执行 sudo chown whoami.whoami ~/.viminfo 讲~/.viminfo拥有者更改为当前用户。原创 2018-07-16 20:57:46 · 12667 阅读 · 2 评论 -
linux调节屏幕亮度
新建三个文本文件并给予执行权限:up.shif [ ! -w /sys/class/backlight/intel_backlight/brightness ];then echo "password" | sudo -S chmod 777 /sys/class/backlight/intel_backlight/brightnessfiread bright < '/转载 2016-05-02 17:55:25 · 1965 阅读 · 0 评论 -
Linux文件操作
系统调用和设备驱动程序(系统调用是调用设备驱动程序的) 为了向用户提供一个一致的接口,设备驱动程序封装了所有与硬件相关的特性。 open:打开文件或设备 read:从打开的问价或设备里读数据 wirte:向文件或设备写数据 close:关闭文件或设备 ioctl:把控制信息传递给设备驱动程序库函数 针对输入输出操作直接使用底层系统调用的一个问题是它们效率非常低 1)使用系统调用会影响原创 2015-04-14 20:09:34 · 470 阅读 · 0 评论 -
编译linux内核出现mkimage command not found错误
mkimage是uboot生存的工具,编译uboot后在uboot/tools下面。然后将其拷贝到/usr/bin目录下并改变他的权限。就行了。原创 2015-04-23 20:45:50 · 877 阅读 · 0 评论 -
linux shell设计——CD唱片管理程序
此程序是l《inux程序设计》书上的例子。这里只是一些详细的分析。“` menu_choice=”” current_cd=”” title_file=”title.cdb” tracks_file=”tracks.cdb” temp_file=/tmp/cdb.trap′rm−f$tempfile′EXIT‘‘‘menuchoice和currentcd初始化为“”,是因为防止输入时直接回原创 2015-04-10 15:26:12 · 1145 阅读 · 0 评论 -
uboot启动第一阶段分析
u-boot第一阶段分析:第一阶段主要是在start.S中.globl _start //声明_start是全局变量,和c语言中的extern相似,声明此变量,并且告诉链 接器此变量是全局的,外部可以访问。由board\100ask24x0\u-boot.lds中 ENTRY(_start)可知,_start是程序入口地址,一开始从nor_flash启动,_start 为0,当执原创 2015-05-07 23:41:27 · 1086 阅读 · 0 评论 -
Ubuntu输入密码登陆后又跳回到登录界面
现象:在Ubuntu登陆界面输入密码之后,黑屏一闪并且出现了check battery state之类的文字之后,又跳转到登录界面。 原因:主目录下的.Xauthority文件拥有者变成了root,从而以用户登陆的时候无法都取.Xauthority文件。 说明:Xauthority,是startx脚本记录文件。Xserver启动时,读文件~/.Xauthority,读入对应其display的记录原创 2015-07-07 14:20:40 · 4185 阅读 · 0 评论 -
Failed to start LSB 网络服务启动失败的四种解决方法
都是从网上拷贝过来的。方法11、执行 service network restart 出现以下错误Restarting network (via systemctl): Job for network.service failed. See 'systemctl status network.service' and 'journalctl -xn' for details.2、根据...原创 2015-12-08 13:26:37 · 101601 阅读 · 11 评论 -
shell中对文本的一些处理
1:echo 输出文本,默认情况下会自动在末尾添加一个换行符,-n选项可以取消换行符 2:显示变量的时候加{}, var=”hi” echo “this is test varTEST”结果为thisistest”所以要想得到正确的结果可以改为echo“thisistestvarTEST” 结果为this is test” 所以要想得到正确的结果可以改为echo “this is te原创 2015-12-25 21:00:46 · 941 阅读 · 0 评论 -
dd命令的简单用法
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2参数注释:if=文件名:输入文件名,缺省为标准输入。即指定源文件。of=文件名:输出文件名,缺省为标准输出。即指定目的文件。ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。obs=byt原创 2016-02-18 21:29:11 · 2566 阅读 · 0 评论 -
解决apt-get install出现依赖包的问题
如果出现依赖包不能自动安装的时候,一般是/etc/apt/sources.list源出现了问题,此时只要将该文件中的源更换即可,源一定要更换为安装系统时配套的源,其他的源或多或少都会有问题。原创 2016-05-10 22:45:56 · 16522 阅读 · 0 评论