
深入理解linux系统
文章平均质量分 55
蜗蜗前行
嵌入式软件
展开
-
linux系统调用
什么是系统调用?内核空间的实现函数被用户空间的函数调用。系统调用的工作流程分析用户空间进入内核空间,arm处理器的软中断swi执行,实现用户空间到内核空间,通过内核函数编号调用内核函数实现新的系统调用。原创 2016-08-03 10:19:14 · 342 阅读 · 0 评论 -
程序编译过程分析
1.概述一个C语言程序从源代码文件变成最后的可执行程序文件,需要经历预处理、编译、汇编、链接四个过程。预处理:条件编译、头文件包含、宏替换,生成.i文件编译:将预处理后的文件转换成汇编语言,生成.s文件汇编:汇编变为目标代码(机器代码)生成.o文件链接:链接目标代码,生成可执行程序。日常使用GCC编译器完成上述过程,需要以下选项:-E P...原创 2018-10-20 18:59:11 · 685 阅读 · 0 评论 -
cached和buffer
有资料认为:free命令里面的buffers是为了写而产生,而cached是为了读而产生。 真实情况下,cached和buffers与读写没有半毛钱关系,它们都是缓存,唯一的区别是,如果你cat /dev/sda1 > /dev/null,这样/dev/sda1内容进入buffers,如果你cat /mnt/aaa/bbb.c > /dev/null,则/mnt/aaa/bbb.c的...原创 2018-03-23 15:35:50 · 458 阅读 · 0 评论 -
cpu如何通过MMU访问到物理地址
cpu的MMU开启后,cpu的寻址过程如下:CPU任何时候发出的地址都是虚拟地址,这个虚拟地址发给MMU后,MMU通过页表在页表里面查出这个虚拟地址对应的物理地址是什么,从而去访问外面的内存条。MMU里面的页表地址寄存器,记录了页表本身存放的位置。现在我们假设每一页的大小是4KB,而且假设页表只有一级。这个页表长成下面这个样子,页表的每一行是32bit。当CPU访问虚拟地址0的时候,MMU...原创 2018-03-19 09:52:23 · 2080 阅读 · 0 评论 -
GNU/Linux下的/proc/[pid]目录下的文件分析
一、相关文件目录/proc/[pid]/auxv/proc/[pid]/cmdline/proc/[pid]/comm/proc/[pid]/cwd/proc/[pid]/environ/proc/[pid]/exe/proc/[pid]/fd/proc/[pid]/latency/proc/[pid]/limits/proc/[pid]/maps/proc/[pid]...原创 2018-02-09 11:11:01 · 588 阅读 · 0 评论 -
linux设备驱动之VFS虚拟文件系统
1.VFS虚拟文件系统 Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。 Linux 有两个特性: a – 跨文件系统的文件操作 Lin原创 2017-01-16 15:44:51 · 1265 阅读 · 0 评论 -
链接器脚本
链接器脚本基本构成 起始链接地址 对齐 变量 代码段首文件链接器脚本示例SECTIONS{ . =0x0;//起始链接地址 . =ALIGN(4);//4字节对其 .text : { start.o(.text)//代码段首文件 *(.text) } . =ALIGN(4); .data :原创 2016-10-15 22:43:27 · 491 阅读 · 0 评论 -
Makefile规则
规则 目标:依赖 命令 led.bin:led.o arm-linux-ld -Tled.lds -o led.elf led.o.PHONY:clean clean: rm *-o led.elf led.bin(只有命令,没有依赖,.PHONY:说明它是伪目标) makefile里面的第一条规则的目标就是最终目标 使用变量前: app1:原创 2016-10-15 22:41:42 · 290 阅读 · 0 评论 -
GCC编译器相关
hello.c 预处理 hello.i 编译 hello.s 汇编 hello.o 链接 hello gcc -E hello.c -o hello.i预处理 gcc -s hello.i -o hello.s将编译成hello.i的汇编文件hello.s gcc -c hello.s -o hello.o 将hello.s汇编成2进制文件 Gcc通过后缀来区别输入文件的类别,常见类型原创 2016-10-15 22:36:23 · 339 阅读 · 0 评论 -
linux内核的制作
linux内核制作##一、linux内核架构linux系统主要由bootloader、kernel,filesystem组成,其中kernel是linux系统的内核。内核主要可被分为用户空间和内核空间。**1.用户空间:**应用程序,C库,配置文件**2.内核空间:**内核,系统调用借口,体系结构相关代码**3.linux系统为什么要划分为用户空间和内核空间**利用处理器的机制,把用户空间和内原创 2016-07-28 22:55:18 · 545 阅读 · 0 评论 -
uboot命令详解
UBOOT命令详解在ARM开发板启动后首先加载bootloader,其中uboot作为bootloader的老大,我们在进入uboot后,在超级终端可通过敲入回车键使其停止加载,此时可以使用uboot的各种命令。**查看uboot支持的指令**:help**查看环境变量:**printenv**查看某个环境变量的信息:**print 指令 print go原创 2016-07-28 22:28:39 · 1310 阅读 · 0 评论 -
linux文件系统
linux文件系统各种形形色色的linux系统的不同实际是不同的文件系统,下面介绍制作arm嵌入式文件系统##**制作arm嵌入式文件系统****1.创建目录**原创 2016-07-28 23:16:14 · 331 阅读 · 0 评论 -
linux内核子系统
linux内核架构7个组成部分system call interface(SCI),Process Management(PM),Memory Management(MM),Arch(体系结构相关代码,和处理器相关代码),Virtual File System(VFS),Network Stack,Device driver;其中与驱动开发相关的是内存管理子系统和进程管理子系统原创 2016-07-29 11:26:05 · 767 阅读 · 0 评论 -
内核链表
内核链表深度分析链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需知道数据总量,可以随机分配空间,可以高效地在链表中任意位置实时插入或者删除数据。链表的开销主要是访问的顺序和组织链的空间损失。原创 2016-08-01 15:45:07 · 314 阅读 · 0 评论 -
进程fork和vfork的区别
#include <stdio.h>#include <stdlib.h>#include <sys/type.h>int main(){ int count = 1; int child = fork(); if(child < 0) { perror("fork error"); } else if(child == 0) { ...原创 2019-04-15 10:07:35 · 483 阅读 · 0 评论