欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

9.4、系统移植 -- 文件系统

程序员文章站 2022-05-22 18:58:22
...
  • 文件系统:
    是一种最原始的界面:最初 用户都是操作文件系统来实现自己的功能,包括 放歌 看电影 娱乐因为在linux世界,一切皆文件. linux把所有的硬件都抽象为 对文件的读写 。

  • 内容:
    命令 配置文件 库文件 普通文件

  • 目录结构:
    9.4、系统移植 -- 文件系统

bin-存放系统命令
sbin-存放命令的

etc-存放系统配置文件
tmp 临时文件
var:  variable 可变的, 日志
lib    :库文件
mnt  :  系统推荐的挂载点
usr:    存放你的 代码 文档 等等.....
	bin:    存放命令的
	sbin:    存放命令的
	内存[RAM]文件系统:        断电丢失   访问速度快
dev: 里面是 所有设备的文件,这些设备 文件不需要保存, 而且需要很快的访问速度
proc: 通过proc我们可以获取内核的 大量信息        
	cmdline,记录 bootargs的参数        
	cpuinfo 记录cpu的信息        
	interrupts 内核中断发生情况        
	meminfo 内存的信息,        
	stat:  系统信息        
	version: 内核版本信息        
	device-tree  记录了设备树中,所有的节点        
	数字:    是每一个进程的信息                
sys:设备驱动专用的    

很多命令,ps top ifconfig uname 等都是 基于proc文件系统实现的 这些命令只是简单 读取里面的 各个文件,分析 显示 结束.
9.4、系统移植 -- 文件系统

  • 如何开机启动:
    内核启动过程:
    1.汇编:arch/arm/kernel/head.S ,修改cpsr指针,进入svc模式,关闭所有中断,得到cpu id,判断cpu合法性
    bl __vet_atags :检查设备树的合法性
    bl __create_page_tables :创建页表, RAM初始化
    bl __mmap_switched : b start_kernel:这是kernel C语言的 第一个 函数
    2.C: start_kernel: 关中断,
setup_arch,  进入arch/arm/mach-xxxx 初始化具体的 某款cpu        
	mm_init();      内存管理初始化        
	sched_init();    进程调度初始化        
	init_IRQ();        外部中断初始化        
	init_timers();     硬件定时器初始化       
	console_init();     终端初始化       
	fork_init();   进程初始化                
	rest_init();                
	1.启动内核第一个线程  kernel_init                
		内核线程init 执行exec(/linuxrc),将自己牺牲,替换为  用户的程序/linuxrc                
		/linuxrc使用户的 第一个进程所有的用户进程都是 /linuxrc的子进程                                linuxrc 去解析一个配置文件:/etc/inittab                    
		#this is run first except when booting in single-user mode.                    
		::sysinit:/etc/init.d/rcS        描述了系统初始化的时候,执行 /etc/init.d/rcS                                    
		RCS里面记录了 开机要执行的动作                    
		# /bin/sh invocations on selected ttys                    
		# Start an "askfirst" shell on the console (whatever that may be)                    
		::respawn:-/bin/sh                    
		# Stuff to do when restarting the init process                    
		::restart:/sbin/init                    
		# Stuff to do before rebooting                    
		::ctrlaltdel:/sbin/reboot                
	2.启动内核的第二个线程  kthreadd                
		kernel thread  domain(守护,内核的守护 进程)            
	3.当前执行体进化为 一个 空闲进程idle                
		当cpu忙完所有工作,没有任务可以出,就去执行空闲进程.                    			
telnet:        远程登录程序,见附件    
  • 嵌入式上文件系统格式:
    文件系统,有不同的格式
    U盘 最常见的fs 是 fat32 文件最大2GB ,fat16
    电脑 NTFS 2TB
    linux ext2 ext3 ext4[最常见] ext5[最新的]

嵌入式:
jiffs2 主要针对nor flash, 也兼容nand flash(效果不好)
yaffs2 只用于nand flash
ext2 不是很常用

nor flash: 70年代,intel,nor flash模仿ram制作,所以 线多[地址线 数据线],体积大,容量小 工艺要求高,贵, 安全性高
nand flash: 比较晚, 针对nor flash缺陷改进.只有8根线,数据和地址共用这8根线, 体积小,容量大, 工艺低,成本低,安全性低 。 nand flash,有一套安全校验机制,可以保证数据 大部分可以恢复.
9.4、系统移植 -- 文件系统