<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wu_junwu的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/wu_junwu</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; wu_junwu]]></copyright><item><title><![CDATA[Linux启动过程中的initramfs和rootfs详解]]></title><link>https://blog.csdn.net/wu_junwu/article/details/159734893</link><guid>https://blog.csdn.net/wu_junwu/article/details/159734893</guid><author>wu_junwu</author><pubDate>Wed, 01 Apr 2026 20:14:26 +0800</pubDate><description><![CDATA[initramfs的/init定位：临时的"引导助手"任务：加载驱动、准备环境、挂载rootfs生命：完成任务后退出，被替换复杂度：简单（几十到几百行）rootfs的/sbin/init定位：系统的"总管家"任务：初始化系统、管理服务、监控进程生命：从启动到关机一直运行复杂度：复杂（数千到数十万行）关键理解：两者是接力关系，initramfs的/init完成使命后通过将自己替换为rootfs的/sbin/init。什么是归档文件？]]></description><category></category></item><item><title><![CDATA[浅谈根文件系统]]></title><link>https://blog.csdn.net/wu_junwu/article/details/116271297</link><guid>https://blog.csdn.net/wu_junwu/article/details/116271297</guid><author>wu_junwu</author><pubDate>Thu, 29 Apr 2021 16:56:32 +0800</pubDate><description><![CDATA[一、什么是文件系统？




百度百科：文件系统是操作系统用于明确存储设备（常见的是磁盘，也有基于NAND Flash的固态硬盘）或分区上的文件的方法和数据结构；即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统，简称文件系统。文件系统由三部分组成：文件系统的接口，对对象操作和管理的软件集合，对象及属性。从系统角度来看，文件系统是对文件存储设备的空间进行组织和分配，负责文件存储并对存入的文件进行保护和检索的系统。具体地说，它负责为用户建立文件，存入、读出、修改、转储文件]]></description><category></category></item><item><title><![CDATA[思维导图：根文件系统]]></title><link>https://blog.csdn.net/wu_junwu/article/details/116264910</link><guid>https://blog.csdn.net/wu_junwu/article/details/116264910</guid><author>wu_junwu</author><pubDate>Thu, 29 Apr 2021 11:37:26 +0800</pubDate><description><![CDATA[＃fv 
挂载的理解图

原理图之nfs方式启动文件夹形式的根文件系统

注意：不断更新中…

]]></description><category></category></item><item><title><![CDATA[Linux内核编译过程中出现：ignoring invalid character `#‘ in expression 语法错误]]></title><link>https://blog.csdn.net/wu_junwu/article/details/114582785</link><guid>https://blog.csdn.net/wu_junwu/article/details/114582785</guid><author>wu_junwu</author><pubDate>Tue, 09 Mar 2021 14:53:30 +0800</pubDate><description><![CDATA[原因：在内核移植过程中，我用的是原因：在内核移植过程中，我用的是source insight 3.5 编辑器，在对源码进行编辑过程中，我用的是单行注释而不是块注释，可能是因为source insight 3.5工具不能识别//注释符，所以导致编译出现”ignoring invalid character `#’ in expression “字样。

解决方法：将其改为块注释重新编译就好了。

ps:为什么会出现这种情况，具体原理希望广大朋友留言解释！！！谢谢

...]]></description><category></category></item><item><title><![CDATA[s5pv210开发板刷机过程中的注意事项]]></title><link>https://blog.csdn.net/wu_junwu/article/details/114379706</link><guid>https://blog.csdn.net/wu_junwu/article/details/114379706</guid><author>wu_junwu</author><pubDate>Thu, 04 Mar 2021 22:50:05 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[secure crt或者ssh secure shell工具对Ubuntu（Linux）进行远程连接]]></title><link>https://blog.csdn.net/wu_junwu/article/details/113592575</link><guid>https://blog.csdn.net/wu_junwu/article/details/113592575</guid><author>wu_junwu</author><pubDate>Wed, 03 Feb 2021 11:45:04 +0800</pubDate><description><![CDATA[在进行连接之前，我们必须保证有线网卡是工作的，在这里我们使用一根网线一段插入电脑的有线网口段，另一端插入一个有联网能力的设备，譬如路由器或者我们嵌入式开发板的网口。
我猜测是因为Linux和Windows连接通信需要利用有线网卡才行

...]]></description><category></category></item><item><title><![CDATA[ubuntu上网问题以及ping通网络设备]]></title><link>https://blog.csdn.net/wu_junwu/article/details/113577593</link><guid>https://blog.csdn.net/wu_junwu/article/details/113577593</guid><author>wu_junwu</author><pubDate>Wed, 03 Feb 2021 01:50:11 +0800</pubDate><description><![CDATA[问题一：ubuntu上网问题
如何ping www.baidu.com?
Ubuntu上网模式有两种：桥接和NAT
1、 桥接模式：
前提是：主机是连接的无线网，主机有线网卡的IP设置的是“自动获得IP”：

第一步：虚拟机→设置→网络适配器→网络连接中选择“桥接模式”→确定
第二步（情况一）：编辑→虚拟网络编辑器→桥接到无线网卡

第三步：vi etc/network/interfaces文件中设置dhcp方式；然后重启网卡。
这种设置的结果是：
（1）Ubuntu的网络连接上，可以ping www.ba]]></description><category></category></item><item><title><![CDATA[思维导图：uboot启动的第二阶段]]></title><link>https://blog.csdn.net/wu_junwu/article/details/112911949</link><guid>https://blog.csdn.net/wu_junwu/article/details/112911949</guid><author>wu_junwu</author><pubDate>Wed, 20 Jan 2021 21:53:59 +0800</pubDate><description><![CDATA[uboot启动的第一阶段
                uboot启动的第一阶段 思维导图


]]></description><category></category></item><item><title><![CDATA[思维导图：uboot启动的第一阶段]]></title><link>https://blog.csdn.net/wu_junwu/article/details/112911848</link><guid>https://blog.csdn.net/wu_junwu/article/details/112911848</guid><author>wu_junwu</author><pubDate>Wed, 20 Jan 2021 21:51:58 +0800</pubDate><description><![CDATA[uboot启动的第一阶段

               uboot启动第一阶段 思维导图


]]></description><category></category></item><item><title><![CDATA[为什么要内存对齐？]]></title><link>https://blog.csdn.net/wu_junwu/article/details/112385183</link><guid>https://blog.csdn.net/wu_junwu/article/details/112385183</guid><author>wu_junwu</author><pubDate>Fri, 08 Jan 2021 22:47:13 +0800</pubDate><description><![CDATA[为什么要内存对齐？
首先：内存是以字节为单位，但是处理器并不会按照一个字节为单位去存取内存。它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存，我们将上述这些存取单位称为内存存取粒度。对于现代计算机硬件来说，内存只能通过特定的对齐地址（比如按照机器字）进行访问。举个例子来说，比如在64位的机器上，不管我们是要读取第0个字节还是要读取第1个字节，在硬件上传输的信号都是一样的。因为它都会把地址0到地址7，这8个字节全部读到CPU，只是当我们是需要读取第0个字节时，丢掉后面7个字节，当我们是需]]></description><category></category></item><item><title><![CDATA[typedef用法详解]]></title><link>https://blog.csdn.net/wu_junwu/article/details/109067004</link><guid>https://blog.csdn.net/wu_junwu/article/details/109067004</guid><author>wu_junwu</author><pubDate>Wed, 14 Oct 2020 15:54:38 +0800</pubDate><description><![CDATA[typedef与#define的区别：
（1）typedef创建的符号名只限于类型，不限于值
（2）typedef由编译器解释，不是预处理器
typedef的四种用法
在实际应用中，typedef主要有下面四种用法：
1）typedef基本数据类型取“别名”
也就是说，C语言中的所有数据类型都可以用typedef关键词来重新定义类型名
typedef unsigned int size;
typedef unsigned int16 u16;
typedef unsigned int8 u8;
.
.
.
]]></description><category></category></item><item><title><![CDATA[2020-09-28]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108858530</link><guid>https://blog.csdn.net/wu_junwu/article/details/108858530</guid><author>wu_junwu</author><pubDate>Mon, 28 Sep 2020 21:51:49 +0800</pubDate><description><![CDATA[《程序是怎样跑起来的》

]]></description><category></category></item><item><title><![CDATA[汇编：中断模式下的现场保护和恢复现场的“疑惑点”——pc为什么减4而不是减8？]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108818382</link><guid>https://blog.csdn.net/wu_junwu/article/details/108818382</guid><author>wu_junwu</author><pubDate>Sat, 26 Sep 2020 22:49:22 +0800</pubDate><description><![CDATA[// 在这个汇编函数中，用来做中断模式下的现场保护和恢复，并且调用真正的中断处理程序

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
	// 处理完成开始恢复现场,其实就是]]></description><category></category></item><item><title><![CDATA[为什么在给寄存器（端口）进行配置时，常常是进行位操作而不直接赋值呢？]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108780936</link><guid>https://blog.csdn.net/wu_junwu/article/details/108780936</guid><author>wu_junwu</author><pubDate>Thu, 24 Sep 2020 19:12:01 +0800</pubDate><description><![CDATA[为什么在给寄存器（端口）进行配置时，常常是进行位操作而不直接赋值呢？
因为我们在对寄存器进行配置时也不一定对其所有的位都需要配置，比如我们对32位的ARM单片机的某个寄存器进行位配置时，我们往往是对32位中的某几位进行配置，其他的位我们并不需要配置，我们希望它保持原来的初始状态（保持初始状态的好处是：当我们在下一次需要对它进行配置时，我们就不用去判断这些位的初始状态是什么）。
我们如果对其进行直接赋值，我们还需要考虑其他不需要配置位的初始值到底是0还是1后才能对该寄存器赋值，但是如果我们利用位操作，那么我们]]></description><category></category></item><item><title><![CDATA[统一编址与独立编址、I/O端口与I/O内存]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108749138</link><guid>https://blog.csdn.net/wu_junwu/article/details/108749138</guid><author>wu_junwu</author><pubDate>Wed, 23 Sep 2020 15:36:07 +0800</pubDate><description><![CDATA[声明：该文章转至网络，因为作者不明，特此声明感谢！！！
理解“统一编址与独立编址、I/O端口与I/O内存”
引言：
  从CPU连出来一把线：数据总线、地址总线、控制总线，这把线上挂着N个接口，有相同的，有不同的，名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入，就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备：内存、硬盘，鼠标、键盘，显示器……          
  对于CPU而言，如果它要发数据到某个设备，其实是发到对应的接口，接口电路]]></description><category></category></item><item><title><![CDATA[双（向）链表的创建，节点插入、遍历、删除]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108704894</link><guid>https://blog.csdn.net/wu_junwu/article/details/108704894</guid><author>wu_junwu</author><pubDate>Mon, 21 Sep 2020 16:10:15 +0800</pubDate><description><![CDATA[/* 
time:2020年9月21日09:50:25
objective:双链表节点创建、插入、遍历、删除
author：wujunwu
*/


#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;string.h&gt;

//节点模板
struct node
{
	struct node *pPrev;
	int data;
	struct node *pNext;
};
//创建节点函数
struct node *create_]]></description><category></category></item><item><title><![CDATA[内存中存储分布方式：大端模式、小端模式]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108522818</link><guid>https://blog.csdn.net/wu_junwu/article/details/108522818</guid><author>wu_junwu</author><pubDate>Thu, 10 Sep 2020 21:13:31 +0800</pubDate><description><![CDATA[大端模式：高字节对应高地址
小端模式：高字节对应低地址
判断代码如下：
方法一：
/*
time：2020年9月10日20:01:17
objective：判断内内存中存储的两种分布方式
author：wujunwu
*/

#include&lt;stdio.h&gt;

//方法一 

int func(void)
{
	int a=1;
	char b=*((char *)(&amp;a));
	return b;

}
//主函数
int main (void)
{
	int i=func();
	]]></description><category></category></item><item><title><![CDATA[单链表的节点创建、访问、插入、遍历、逆序]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108521205</link><guid>https://blog.csdn.net/wu_junwu/article/details/108521205</guid><author>wu_junwu</author><pubDate>Thu, 10 Sep 2020 19:30:58 +0800</pubDate><description><![CDATA[创建一个链表一个节点
/*
time：2020年9月9日20:12:24
obective:创建一个链表
author：wujunuw
*/

#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;string.h&gt;

//定义节点中的有效数据和指针
int data;
struct node *PNext;

//创建节点
struct node
{
	int data;      //有效数据
	struct node *PNex]]></description><category></category></item><item><title><![CDATA[创建静态链接库/动态链接库]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108408696</link><guid>https://blog.csdn.net/wu_junwu/article/details/108408696</guid><author>wu_junwu</author><pubDate>Fri, 04 Sep 2020 21:53:54 +0800</pubDate><description><![CDATA[1. 创建静态链接库
第一步；创建一个源代码
/* 
创建静态链接库的源代码
*/

#include&lt;stdio.h&gt;


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.]]></description><category></category></item><item><title><![CDATA[静态链接库和动态链接库的工作原理]]></title><link>https://blog.csdn.net/wu_junwu/article/details/108411942</link><guid>https://blog.csdn.net/wu_junwu/article/details/108411942</guid><author>wu_junwu</author><pubDate>Fri, 04 Sep 2020 21:31:15 +0800</pubDate><description><![CDATA[静态链接库

]]></description><category></category></item></channel></rss>