Linux
cherisegege
这个作者很懒,什么都没留下…
展开
-
很好的linux启动说明( bootsect.S、setup.S、head.S)
bootsect.S,系统引导程序,一般不超过512字节。在PC系统结构中,线性地址0xA0000以上,即640K以上用于图形接口卡和BIOS自身,640K以下为系统的基本内存。如果配置更多的内存,则0x100000,即1MB处开始称为高内存。当BIOS引导一个系统时,总是把引导扇区读入到基本内存地址为0x7c00的地方,然后跳转到此执行引导扇区的代码。这段代码将自身搬运到0x90000处转载 2018-01-21 17:13:25 · 1195 阅读 · 0 评论 -
lds文件分析
官方文档:https://sourceware.org/binutils/docs-2.30/ld/index.html#SEC_Contents所有创建可执行文件的最后一步就是链接。它是由ld或者是用gcc间接调用ld来完成的。它主要任务和把外部库和应用程序的目标代码放到text段正确位置。以及创建程序中其它段(如data/bss段)。 标准C程序的链接是一般是固定的。它是ld调用一个缺省的...转载 2018-05-13 16:32:13 · 7230 阅读 · 1 评论 -
关于shared library的描述
原文链接:https://blog.csdn.net/w_ww_w/article/details/7002880以前搞共享库动态加载管理时找的一些资料,放在这里共享。引言:在xmeeting中,关于usb手柄部分,采用动态库调用方式,下面翻译一篇David A. Wheeler写的文章。文章就如何创建和使用静态库,共享库以及动如何动态装载库进行了论述。内容纲要如下: 1.概述 2.静态库 3.共...转载 2018-05-23 17:19:42 · 7250 阅读 · 0 评论 -
目标代码文件、可执行文件和库
C编程的基本策略是使用程序将源代码转换为可执行文件,此文件包含可运行的机器语言代码。C分两步完成这一工作:编译和链接。编译器将源代码转换为中间代码,连接器将此中间代码与其他代码相结合来生成可执行文件。C使用被划分为两部分的这一方法使程序便于模块化,你可以分别编译各个模块,然后使用连接器将编译过的模块结合起来。这样,如何需要改变一个模块,则不必重新编译所有其他模块。同时,链接器将您的程序与编译的库代...转载 2018-06-15 14:07:02 · 768 阅读 · 0 评论 -
什么是重定位?为什么需要重定位?
原文地址:https://blog.csdn.net/gyyu32g/article/details/78508406一、必须知道的几个概念。1、链接地址和运行地址。①运行地址,顾名思义就是程序运行的时候的地址,也就是你用工具将代码下载到RAM的那个地址,也叫加载地址。②链接地址,由链接脚本指定的地址。为什么需要链接脚本指定地址呢?你想一下,在c语言编程中,当我们需要调用一个A函数的时候,编译器是...转载 2018-06-15 17:30:15 · 24638 阅读 · 0 评论 -
设备树
原文链接:https://blog.csdn.net/klaus_wei/article/details/42915545zynq设备树历史最详解注:由于内核版本的演变,设备树成了任何使用较高版本linux系统的设备平台所必须文件,然国内相关技术文档严重不足,本文是国外技术专栏的翻译,原文链接:http://xillybus.com/tutorials/device-tree-zynq-1 ...转载 2018-06-02 14:52:17 · 638 阅读 · 0 评论 -
LC_ALL=C的含义
原文链接:https://www.cnblogs.com/benmm/p/4010834.html在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。在locale环境中,有一组变...转载 2018-06-02 16:03:49 · 2945 阅读 · 0 评论 -
x86中的页表结构和页表项格式
原文链接:https://www.cnblogs.com/vinozly/p/5703215.html一、页表结构分页转换功能由驻留在内存中的表来描述,该表称为页表(page table),存放在物理地址空间中。页表可看做简单的220个物理地址数组。线性到物理地址的映射功能可以简单地看做进行数组查找。线性地址的高20位构成这个数组的索引值,用于选择对应页面的物理(基)地址。线性地址的低12位给出了...转载 2018-06-24 10:55:27 · 4151 阅读 · 0 评论 -
dd命令的解释
原文链接:http://blog.sina.com.cn/s/blog_8b5bb24f01016y3o.htmldd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2参数注释:1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >2. o...转载 2018-06-18 22:46:36 · 271 阅读 · 0 评论 -
二值信号量和互斥锁到底有什么区别?
原文链接:https://www.cnblogs.com/codescrew/p/8970514.html在说明之前我先抛出结论:互斥锁和二值信号量在使用上非常相似,但是互斥锁解决了优先级翻转的问题假定我们现在有三个任务,task1,task2,task3,任务优先级task1最高,然后依次降低。我们知道在系统调度的时候当两个任务同时处于就绪态的时候,系统会优先执行优先级高的任务好了,让我们来看两...转载 2018-07-06 11:28:48 · 4115 阅读 · 1 评论 -
linux驱动编写之poll机制
原文链接:https://www.cnblogs.com/amanlikethis/p/6915485.html一、概念1、poll情景描述 以按键驱动为例进行说明,用阻塞的方式打开按键驱动文件/dev/buttons,应用程序使用read()函数来读取按键的键值。这样做的效果是:如果有按键按下了,调用该read()函数的进程,就成功读取到数据,应用程序得到继续执行;倘若没有按键按下,则...转载 2018-07-15 11:41:00 · 389 阅读 · 0 评论 -
linux64平台上编译32位程序: GCC编译选项 -m64 -m32 -mx32
原文链接:https://blog.csdn.net/yyywill/article/details/54426900x86-64 与 IA-64x86-64一般称为AMD x86-64,难道x86-64不是Intel首先搞出来的指令集么?这回的确是AMD干的,但是用的是Intel 16bits升到32bits向下兼容的套路。大致是这样的:x86:从1978年来的8086处理器开始,就...转载 2018-08-17 10:20:12 · 12238 阅读 · 0 评论 -
C语言程序可以没有main函数
原文链接:http://www.wufangbo.com/175871/学习C语言的同学都知道,每个C程序要有一个main函数,程序从main函数开始执行,在main函数中结束。但事实上,C程序也可以没有main函数,或者说自己可以指定入口函数。下面这篇文章介绍了如何实现这一过程。这篇文章转自:http://www.codeweblog.com,作者不详。学习这个内容对程序设计没啥影响,但能更深入...转载 2018-05-13 10:34:55 · 16511 阅读 · 2 评论 -
BIOS INT 10中断功能
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内。使用 INT 10H 中断服务程序时,先指定 AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 10H。底下是它们的说明:AH功 能调用参数返回参数 / 注释1 置光标类型 ...转载 2018-04-07 17:56:32 · 2240 阅读 · 0 评论 -
BIOS系统服务 —— 直接磁盘服务(int 0x13)
直接磁盘服务(Direct Disk Service——INT 13H)00H —磁盘系统复位 0EH —读扇区缓冲区01H —读取磁盘系统状态 0FH —写扇区缓冲区02H —读扇区 10H —读取驱动器状态03H —写扇区 11H —校准驱动器04H...转载 2018-04-06 18:49:38 · 2784 阅读 · 0 评论 -
A20 地址线问题
A20 地址线问题1981 年8 月,IBM 公司最初推出的个人计算机IBM PC 使用的CPU 是Intel 8088。在该微机中地址线只有20 根(A0 – A19)。在当时内存RAM 只有几百KB 或不到1MB 时,20 根地址线已足够用来寻址这些内存。其所能寻址的最高地址是0xffff:0xffff,也即0x10ffef。对于超出0x100000(1MB)的寻址地址将默认地环绕到0转载 2018-01-21 19:03:17 · 2255 阅读 · 0 评论 -
GDT(全局描述符表)和LDT(局部描述符表)
每个程序都有自己的LDT,但是同一台计算机上的所有程序共享一个GDT。LDT描述局部于每个程序的段,包括其代码、数据、堆栈等。GDT描述系统段,包括操作系统本身。①全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Int转载 2018-01-21 19:25:14 · 2562 阅读 · 0 评论 -
Linxu 进程描述符task_struct
文章链接:http://www.cnblogs.com/qingjiaowoxiaoxioashou/p/5547260.html转载 2018-01-07 13:05:18 · 156 阅读 · 0 评论 -
内存管理中的几种地址类型
作者:装逼百科链接:https://www.zhihu.com/question/60554200/answer/180303046来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。一、逻辑地址(有时也称虚拟地址) 逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如在C语言指针编程中,可以读取指针变量本身值(&操作),实际...转载 2018-02-11 11:43:23 · 1051 阅读 · 0 评论 -
sysfs
"sysfs is a ram-based filesystem initially based on ramfs. It provides a meansto export kernel data structures, their attributes, and the linkages between them touserspace.” --- documentation/filesyst...转载 2018-02-11 15:51:46 · 228 阅读 · 1 评论 -
tmpfs 内存文件系统
前几天发现服务器的内存(ram)和swap使用率非常低,于是就想这么多的资源不用岂不浪费了?google了一下,认识了tmpfs,总的来说tmpfs是一种虚拟内存文件系统正如这个定义它最大的特点就是它的存储空间在VM里面,这里提一下VM(virtual memory),VM是由linux内核里面的vm子系统管理的东东,现在大多数操作系统都采用了虚拟内存管理机制?linux下面VM的大小由RM(Re...转载 2018-02-11 16:24:46 · 1961 阅读 · 1 评论 -
学会理解并编辑/etc/fstab
fstab(/etc/fstab)是Linux下比较重要的配置文件,它包含了系统在启动时挂载文件系统和存储设备的详细信息。下面是我机子上的 fstab文件: LABEL=/ / ext3 defaults 1 1 LABEL=/boot...转载 2018-02-11 17:09:19 · 2622 阅读 · 0 评论 -
关于实现udev/mdev自动挂载与卸载
在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似。不能在挂载的目录中进行热插拔,否则会出现问题,不过此问题在下次插入U盘时不会造成影响,可能对U盘有损坏。本文介绍了mdev与udev两种方法来实现自动挂载,读者可根据需要任选其一即可。 首先介绍一下mdev与udev之...转载 2018-02-11 18:00:48 · 242 阅读 · 0 评论 -
跟我一起写udev规则
目录介绍 关于本文档 更新历史概念 术语: devfs, sysfs, nodes, etc. 为什么? 内置固定命名设计编写规则 规则文件和语义 规则语法 基本规则 sysfs匹配属性 设备级联结构 字符串替换 字符串匹配从sysfs中查找合适信息 sysfs树 udevinfo...转载 2018-02-11 18:06:17 · 368 阅读 · 0 评论 -
安装NFS服务,并挂载到开发板
1.前言 由于嵌入式linux开发大多数使用的是交叉编译环境,难免很频繁的将文件在开发板和PC环境之间传递,最方便的当然是网络传递了,可以使用FTP,以及挂载NFS两种方式了,显然后者更为方便了。2.NFS服务安装 Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务程序: sudo apt-get install nfs-kernel-...转载 2018-03-01 19:51:24 · 632 阅读 · 0 评论 -
linux各种常用源码网站
busybox的源码:https://busybox.net/downloads/ubuntu的下载网站:http://www.ubuntu.org.cn/download/ubuntu-kylinlinux内核源码网站:https://www.kernel.org/所有电气数据手册下载网站:http://www.alldatasheet.com/mplayer源码网站:http://www.mp...转载 2018-04-06 12:02:29 · 2946 阅读 · 0 评论 -
函数调用栈 剖析+图解
栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。当发生函数调用的时候,栈空间中存放的数据是这样的:...转载 2018-04-06 14:50:11 · 476 阅读 · 0 评论 -
CFI(Common Flash Interface)详解
原文链接:https://blog.csdn.net/emma3slp/article/details/5591086【什么是CFI】CFI(Common Flash Interface),是JEDEC(Joint Electron Device Engineering Council,电子器件工程联合委员会)制定的一个接口,用来帮助程序读取Flash的制造商ID和设备ID,确定Flash...转载 2018-08-24 13:43:39 · 6884 阅读 · 0 评论