自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

转载 浅谈根文件系统

一、什么是文件系统?百度百科:文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操作和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件

2021-04-29 16:56:32 472

原创 思维导图:根文件系统

#fv 挂载的理解图原理图之nfs方式启动文件夹形式的根文件系统注意:不断更新中…

2021-04-29 11:37:26 150

原创 Linux内核编译过程中出现:ignoring invalid character `#‘ in expression 语法错误

原因:在内核移植过程中,我用的是原因:在内核移植过程中,我用的是source insight 3.5 编辑器,在对源码进行编辑过程中,我用的是单行注释而不是块注释,可能是因为source insight 3.5工具不能识别//注释符,所以导致编译出现”ignoring invalid character `#’ in expression “字样。解决方法:将其改为块注释重新编译就好了。ps:为什么会出现这种情况,具体原理希望广大朋友留言解释!!!谢谢...

2021-03-09 14:53:30 1852

原创 s5pv210开发板刷机过程中的注意事项

SD卡刷机方法注意一:串口终端输入fastboot后出现erro:no MBR is found at SD/MMC解决方法:先在终端输入fdisk -c 0重新对SD卡进行分区,然后再fastboot注意二:在插入SD卡进行进行烧录时候,首先需要在串口终端输入fastboot,然后再在Windows的cmd命令行中输入fastboot devices 进行开发板设备的是否连接的检测,最后命令行中会出现SMDKC110-01 fastboot字样但是,如果没有首先在串口终端输入fastb

2021-03-04 22:50:05 790 2

原创 secure crt或者ssh secure shell工具对Ubuntu(Linux)进行远程连接

在进行连接之前,我们必须保证有线网卡是工作的,在这里我们使用一根网线一段插入电脑的有线网口段,另一端插入一个有联网能力的设备,譬如路由器或者我们嵌入式开发板的网口。我猜测是因为Linux和Windows连接通信需要利用有线网卡才行...

2021-02-03 11:45:04 299

原创 ubuntu上网问题以及ping通网络设备

问题一:ubuntu上网问题如何ping www.baidu.com?Ubuntu上网模式有两种:桥接和NAT1、 桥接模式:前提是:主机是连接的无线网,主机有线网卡的IP设置的是“自动获得IP”:第一步:虚拟机→设置→网络适配器→网络连接中选择“桥接模式”→确定第二步(情况一):编辑→虚拟网络编辑器→桥接到无线网卡第三步:vi etc/network/interfaces文件中设置dhcp方式;然后重启网卡。这种设置的结果是:(1)Ubuntu的网络连接上,可以ping www.ba

2021-02-03 01:50:11 9283

原创 思维导图:uboot启动的第二阶段

uboot启动的第一阶段 uboot启动的第一阶段 思维导图

2021-01-20 21:53:59 99 2

原创 思维导图:uboot启动的第一阶段

uboot启动的第一阶段 uboot启动第一阶段 思维导图

2021-01-20 21:51:58 121 1

转载 为什么要内存对齐?

为什么要内存对齐?首先:内存是以字节为单位,但是处理器并不会按照一个字节为单位去存取内存。它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存,我们将上述这些存取单位称为内存存取粒度。对于现代计算机硬件来说,内存只能通过特定的对齐地址(比如按照机器字)进行访问。举个例子来说,比如在64位的机器上,不管我们是要读取第0个字节还是要读取第1个字节,在硬件上传输的信号都是一样的。因为它都会把地址0到地址7,这8个字节全部读到CPU,只是当我们是需要读取第0个字节时,丢掉后面7个字节,当我们是需

2021-01-08 22:47:13 390

原创 typedef用法详解

typedef与#define的区别:(1)typedef创建的符号名只限于类型,不限于值(2)typedef由编译器解释,不是预处理器typedef的四种用法在实际应用中,typedef主要有下面四种用法:1)typedef基本数据类型取“别名”也就是说,C语言中的所有数据类型都可以用typedef关键词来重新定义类型名typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...

2020-10-14 15:54:38 40153 4

原创 2020-09-28

《程序是怎样跑起来的》

2020-09-28 21:51:49 84

原创 汇编:中断模式下的现场保护和恢复现场的“疑惑点”——pc为什么减4而不是减8?

// 在这个汇编函数中,用来做中断模式下的现场保护和恢复,并且调用真正的中断处理程序IRQ_handle: // 设置IRQ模式下的栈 ldr sp, =IRQ_STACK // 保存LR // 因为ARM有流水线,所以PC的值会比真正执行的代码+8, sub lr, lr, #4 // 保存r0-r12和lr到irq模式下的栈上面 stmfd sp!, {r0-r12, lr} // 在此调用真正的isr来处理中断 bl irq_handler // 处理完成开始恢复现场,其实就是

2020-09-26 22:49:22 1559

原创 为什么在给寄存器(端口)进行配置时,常常是进行位操作而不直接赋值呢?

为什么在给寄存器(端口)进行配置时,常常是进行位操作而不直接赋值呢?因为我们在对寄存器进行配置时也不一定对其所有的位都需要配置,比如我们对32位的ARM单片机的某个寄存器进行位配置时,我们往往是对32位中的某几位进行配置,其他的位我们并不需要配置,我们希望它保持原来的初始状态(保持初始状态的好处是:当我们在下一次需要对它进行配置时,我们就不用去判断这些位的初始状态是什么)。我们如果对其进行直接赋值,我们还需要考虑其他不需要配置位的初始值到底是0还是1后才能对该寄存器赋值,但是如果我们利用位操作,那么我们

2020-09-24 19:12:01 1284

原创 统一编址与独立编址、I/O端口与I/O内存

声明:该文章转至网络,因为作者不明,特此声明感谢!!!理解“统一编址与独立编址、I/O端口与I/O内存”引言:  从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内存、硬盘,鼠标、键盘,显示器……            对于CPU而言,如果它要发数据到某个设备,其实是发到对应的接口,接口电路

2020-09-23 15:36:07 4076

原创 双(向)链表的创建,节点插入、遍历、删除

/* time:2020年9月21日09:50:25objective:双链表节点创建、插入、遍历、删除author:wujunwu*/#include<stdio.h>#include<stdlib.h>#include<string.h>//节点模板struct node{ struct node *pPrev; int data; struct node *pNext;};//创建节点函数struct node *create_

2020-09-21 16:10:15 213

原创 内存中存储分布方式:大端模式、小端模式

大端模式:高字节对应高地址小端模式:高字节对应低地址判断代码如下:方法一:/*time:2020年9月10日20:01:17objective:判断内内存中存储的两种分布方式author:wujunwu*/#include<stdio.h>//方法一 int func(void){ int a=1; char b=*((char *)(&a)); return b;}//主函数int main (void){ int i=func();

2020-09-10 21:13:31 346 4

原创 单链表的节点创建、访问、插入、遍历、逆序

创建一个链表一个节点/*time:2020年9月9日20:12:24obective:创建一个链表author:wujunuw*/#include<stdio.h>#include<stdlib.h>#include<string.h>//定义节点中的有效数据和指针int data;struct node *PNext;//创建节点struct node{ int data; //有效数据 struct node *PNex

2020-09-10 19:30:58 763

原创 创建静态链接库/动态链接库

1. 创建静态链接库第一步;创建一个源代码/* 创建静态链接库的源代码*/#include<stdio.h>void func1(void){ printf(“wujunwu\n”);}int func2(int x,int y){ return x+y;}第二步:创建一个.h文件作为函数声明void func1(void);int func2(int x,int y);第三步:创建一个makefile文件编译all: gcc wujunwu.

2020-09-04 21:53:54 463

原创 静态链接库和动态链接库的工作原理

静态链接库

2020-09-04 21:31:15 157

原创 container_of 宏

/*time:2020年8月31日14:55:17objective:理解container_of宏function:知道结构体中某变量的指针(地址)和偏移量offsetof(type,member)(&((type*)0)->member) 反求结构体首地址author:wu_junwu */#include<stdio.h>//获得结构体中某变量member的偏移量#define offsetof(type,member)((int)&am

2020-08-31 20:38:25 172

原创 offsetof宏

/*time:2020年8月31日14:14:34objective:理解宏offsetof的用途 function:自动计算结构体中变量的偏移量author:wu_junwu */#include<stdio.h>struct definestruct{ int a; char b; short c; long d;}__attribute__((packed)); //__attribute__((packed))取消对齐访问,注意:attribute前后下划线分

2020-08-31 14:49:16 235

原创 指针和多维数组的那点事儿

俗话说:学C语言不懂指针纯属瞎忙活…为什么要用指针?因为计算机的硬件指令非常依赖地址,指针更加接近机器语言,使得一些编译器在编译时效率更高。一重指针变量比较简单,这里我们主要来理解二重指针!!!说到指针、数组大家都不会陌生。但是,今天我们要明白:什么是数组指针?什么是指针数组?数组指针:从中文的语句结构中知道:这里的“数组”是修饰“指针”的。所以重点在于“指针"。即数组是修饰词指针数组:相反,这里的重点是“数组”,指针用于修饰"数组"一词。举例://定义不同的数组指针或指针数组int *

2020-08-28 09:47:34 106

原创 使用VM虚拟机下的Ubuntu如何连校园网?

平时在家里很容易连接,可是到了学校怎么也连不上校园网?怎么回事?等待解决???

2020-08-22 18:51:31 683

原创 无家可归的野指针

野指针首先了解定义指针的三步骤:第一步:定义指针变量int *p;第二步:绑定p=&a //让指针指向a变量的地址或者也可以这样绑定:p=(int *)4 //让指针指向地址为4的变量第三步:解引用*p=100; //表示变量本身简单的理解就是指针地址是随机的,“瞎乱指向的”。先看一段简单的代码:include<stdio.h>int main(void){ //定义指针变量 int *p; //解引用 *p=100;

2020-08-21 20:48:14 139

原创 内存那点事儿之“内存管理”——栈、堆、数据段(数据区)

问题:内存是暂存数据变量的场所,这些内存是如何分配给数据的呢?也就是说这些数据是如何在内存中排布的呢?首先要明白一个排布的工具:数据结构数据结构:数据结构就是研究数据如何组织加工的常见的数据结构有:数组(最简单的数据结构)、结构体、栈、堆、队列、链表、哈希表、二叉树…………数组数组是管理内存和普通变量本质上没有太大差别普通变量int a——首先,编译器在内存中申请一段内存(4字节),获得该内存的地址(编译器知道地址,我们程序员不知道地址是多少,也没必要知道);然后将内存分配给a,再将数据变量名

2020-08-21 17:57:40 1406

原创 内存那点事儿之“数据类型和内存的关系”

数据类型和内存的关系首先我们来了解一下内存的概念图形是怎样的?(以32位系统的内存为例)内存:存储变量的地方当我们在32位系统中定义一个变量,最好将这个变量的数据类型定义成int(或者其他4字节的数据类型),因为这样可以使得效率最高。原因在于内存硬件的配置更加合适32位即4字节的数据类型的变量。但是也不能说不能定义像8位(2字节)的char类型,但是效率低。即使使用一个bit就可以定义的bool类型时,系统也会给bool分配32位内存,效率高,不吝啬内存空间。内存对齐若要在内存中存储一个数字i

2020-08-20 22:44:02 881

原创 C语言中基本的位操作(重点——移位):

C语言中的位操作:首先大家要明白位操作中的常用的操作符有:位与、位或、位异或。位与:符号是‘’&‘‘(注意这里的&和‘’逻辑与‘’中的&&不同)。其特点是当两个位操作数是1&1=1,1&0=0,0&0=0位或:符号是‘’|‘’。特点是当两个位操作数中有一个是1,结果就是1;当两个位操作数中都为0,则结果为0位异或:符号是‘’^‘’。特点是当两个位操作数不同时,结果为1;当两个操作数相同时,结果为0.下面是位操作在寄存器中的“大显身手”我们知

2020-08-17 14:26:20 1124

转载 为什么寄存器处理数据的速度比内存快?

为什么寄存器处理数据的速度比内存快?计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。同样都是晶体管存储设备,为什么寄存器比内存快呢?Mike Ash写了一篇很好的解释,非常通俗地回答了这个问题,有助于加深对硬件的理解。下面就是我的简单翻译。原因一:距离不同距离不是主要因素,但是最好懂,所以放在最前面说。内存离 CPU比较远,所以要耗费更长的时间读取。以3GHz的CPU为例,电流每秒钟可以振荡30亿次,每次耗时大约为0.33纳

2020-08-16 13:42:16 2454 1

原创 python 操作技巧(1):jupyter notebook单元格状态的切换:code状态《==》Makedown状态

jupyter notebook单元格状态的切换:code状态《==》Makedown状态在编辑程序时,常常需要将单元格中的内容作为标题,这是我们就会用到Makedown指令,即按Esc进入命令模式,在按M键,最后shift+enter或者Ctrl+enter,实现下图但是,我们如何将Makedown状态的单元格恢复Code编辑状态呢?首先同样按ESC进入命令模式,然后按Y键,这样就恢复了您需要的code编辑状态,效果如下图。小小技巧,希望可以帮到您!...

2020-08-14 22:13:53 908

原创 ARM汇编概念(1): 什么是链接地址、运行地址、存储地址? 什么是位置无关码、位置有关码? ldr和adr的理解?

ARM汇编概念(1):什么是链接地址、运行地址、存储地址?什么是位置无关码、位置有关码?ldr和adr的理解?参考来源:http://blog.sina.com.cn/s/blog_93339c560102wjqm.html链接地址:在链接脚本里指定内存地址,编译时指定的代码运行时应该所处的内存地址。它是绝对地址(编译后的定值)。运行地址:当前代码运行时实际所处的地址。它是相对地址(相对于当前程序开始运行时的内存地址)。存储地址:代码烧写到ROM中的地址,比如NANDFLASH。链接地

2020-08-12 20:49:42 1644

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除