我的任务就是用u-boot把flash的内容重烧。我是这样认为的:我的机器从flash加载u-boot代码到内存后我就完全运行内存中的u-boot这时跟flash无关了,所以能对其改写(当然如果u-boot坏了就重新启动不了了)。
我看到一些关于bootloader的说明,大体就是分3部分bootloader(我这具体就是u-boot)、kernel、文件系统1(为了更好的说明我的问题,这里的文件系统我叫做“文件系统1”)。
系统的启动过程简单说就是bootloader初始化环境然后转到kernel执行然后kernel加载文件系统1(其实细节很复杂,我们只是看看流程)。
我的问题也就来了,我认为(可能有错)文件系统就是一些对存储设备设定的数据结构,内核根据这些结构存取存储设备。我认为(可能有错)硬盘的文件系统(数据结构)是对其格式化的时候写入的而且是存在整个硬盘上。那我的flash并没有格式化而且它的内容只是随意组织的(我把bootloader放在一个地方、kernel一个地方、文件系统1一个地方但对地址有一定的要求)。那么对于flash存储设备本身有没有文件系统?
就是说我认为文件系统是对硬件的类似格式化的操作,怎么linux竟然能把文件系统(我上面的文件系统1就是被弄成了可以拷贝的文件)当成文件来随意拷贝呢。
再往细里说就是linux kernel是怎么加载文件系统的(文件系统是一个文件吗)。
28 个解决方案
#1
存储设备本身也是有驱动的,比如硬盘和flash都有扇区的概念,这就是硬件驱动的事,由kernel加载。而文件系统说到底就是如何去读写这些扇区。理论上,没有文件系统,也能访问数据,比如直接读bootloader,又比如oracle的Raw分区等等。
kernel有一个虚拟的文件系统架构,包含了各种系统调用,比如read、write等等,不同的文件系统需要实现这些调用。所以说,文件系统不是一个文件,而是文件在硬件上存储和读取的系统。比如说每个文件占用多少个扇区,改文件占用的每个扇区的索引值等等。可以这么理解,文件系统就是管理这些扇区,将文件按一定规则存放到这些扇区里去。
所以,没有文件系统你也能访问硬件数据。比如说假设flash的设备是/dev/sda,直接去读/dev/sda这个文件的前512字节,就是读到了flash的第一个扇区的数据。
至于格式化,就是针对不同的文件系统,初始化一些扇区,比如预留某些扇区作为索引,某些扇区保留目录等等。
kernel有一个虚拟的文件系统架构,包含了各种系统调用,比如read、write等等,不同的文件系统需要实现这些调用。所以说,文件系统不是一个文件,而是文件在硬件上存储和读取的系统。比如说每个文件占用多少个扇区,改文件占用的每个扇区的索引值等等。可以这么理解,文件系统就是管理这些扇区,将文件按一定规则存放到这些扇区里去。
所以,没有文件系统你也能访问硬件数据。比如说假设flash的设备是/dev/sda,直接去读/dev/sda这个文件的前512字节,就是读到了flash的第一个扇区的数据。
至于格式化,就是针对不同的文件系统,初始化一些扇区,比如预留某些扇区作为索引,某些扇区保留目录等等。
#2
x86大哥来了。
呵呵
#3
X86全说了,支持。
#4
那我移植的“文件系统1”这个文件是怎么回事啊?
#5
接分。。。
我的“下载”里面有这方面的资料,可能有帮助。。。
我的“下载”里面有这方面的资料,可能有帮助。。。
#6
别可能啊,确定点!
#7
人呢,出来说两句啊!
#8
加载的是根文件系统,它是一个特殊的文件系统,它主要是为系统提供命令集、配置文件、设备文件等这些系统所需要的东西。而我们一般说的文件系统只是存储设备上数据的一个组织结构,也就是说是用户文件的组织。如果没有那个根文件系统,系统有许多功能实现起来不太方便。大致就是这样...
#9
不懂,突然发现X86神人来了,以前没遇到过。膜拜下
#10
就是说,在普通的存储设备(如pc的磁盘)上根文件系统可以直接为“存储设备上数据的一个组织结构”而在嵌入式中根文件系统是“主要是为系统提供命令集、配置文件、设备文件等这些系统所需要的东西”(被称为文件系统映像)这里的文件系统和flash设备无关。
在简单说就是我们的普通pc也可以不指定磁盘为根文件系统取而代之的是“文件系统映像”
#11
x86大哥已经说的很详细了。
#12
顶
#13
哦。详细归详细可我看不懂啊,对我来说还没有这个答案直接呢!
牛人当然要尊重!!!但对于问题本身来说跟谁提供的答案没关系。重要的是把问题彻底搞明白!!!!
牛人当然要尊重!!!但对于问题本身来说跟谁提供的答案没关系。重要的是把问题彻底搞明白!!!!
#14
不排除我太菜的可能!!!
我怎么感觉8楼那哥们回复的更贴近我的问题的本质。
我怎么感觉8楼那哥们回复的更贴近我的问题的本质。
#15
再怎么存储都是一堆二进制数据,这里是把整个文件系统做成一个映像文件,格式化过程太啰嗦,再写数据麻烦,直接烧写一个映像文件,bang!文件管理结构、文件数据。。。都有了
#16
不懂,特来支持...
#17
是不是说我把pc的文件系统做成ram disk形式的“文件系统映像”然后在grub中设置相应的参数,就可以让pc的内核加载ram disk根文件系统,而不是通常的加载硬盘分区作为根文件系统呢?
#18
沉了啊!!!
#19
主要是这个问题不好说。
#20
内核和根文件系统是不能单独用的,楼主学习下linux系统的基本原理就明白了。
#21
文件系统分为好几种,一种是根文件系统,比如romfs,j2ffs等,这些文件系统提供了许多命令行接口。在内核启动的时候进行挂载。当进入系统后实际上就是进入了根文件系统。
还有一种对文件系统的解释就是一种 如何组织外部存储器上文件存储,访问方式的系统,比如传统的ext2,ext3,ntfs等。一般也称为格式化方式。
还有一种对文件系统的解释就是一种 如何组织外部存储器上文件存储,访问方式的系统,比如传统的ext2,ext3,ntfs等。一般也称为格式化方式。
#22
我试验过了,按我说的可以让grub加载“根文件系统映像”。他的原理跟制作linux livecd似的。
livecd是通过 initrd 机制给内核先提供一个很微小的内存根文件系统。然后由该内存文件系统经过一系列的过程加载 squashfs 文件系统然后,内核将根文件系统切换到 squashfs
我们可以只启动 initrd 的内存文件系统,这个跟嵌入式的很相似!!!
下面写出grub的配置:
root (hd0,2)
kernel /boot/LINUX
initrd /boot/initrd.gz
上面的很多要根据实际情况设定,另外inited.gz可以自己制做或用livecd中的(我用的puppy linux中的)做好要保证你的kernel与inited.gz的一致性。
感觉这里的grub相当于u-boot、initrd.gz相当于“根文件系统映像”。
livecd是通过 initrd 机制给内核先提供一个很微小的内存根文件系统。然后由该内存文件系统经过一系列的过程加载 squashfs 文件系统然后,内核将根文件系统切换到 squashfs
我们可以只启动 initrd 的内存文件系统,这个跟嵌入式的很相似!!!
下面写出grub的配置:
root (hd0,2)
kernel /boot/LINUX
initrd /boot/initrd.gz
上面的很多要根据实际情况设定,另外inited.gz可以自己制做或用livecd中的(我用的puppy linux中的)做好要保证你的kernel与inited.gz的一致性。
感觉这里的grub相当于u-boot、initrd.gz相当于“根文件系统映像”。
#23
最好要保证你的kernel与inited.gz的一致性。
#24
先说说PC的grub:
stage1 这个前面的446B与MBR前446B是相同的 这个是为了找到boot sector
xxfs_stage1_5 这个是加载到ram中的文件系统 如果没有它 就无法针对某个由xxfs格式的分区读写
显示开机选项
加载stage2 这个在MBR后32k处(忘记是不是这个数了) 开机后面的事情就都交给stage2了
内核加载运行
文件系统初始化 查找intrd.img(假定是这个名字 这个就是文件系统镜像了也就是你说的文件系统1)
intrd.img做什么呢
挂载 文件系统设备文件 如/proc /sys
生成相应的设备文件
开户一些系统服务
等等
没有这些 内核是跑不下去的 会panic掉
内核本身实现了一层VFS 对各种文件系统进行了抽象 这样可以支持很多文件系统
比如ext2 ext3现在到ext4了 这里的文件系统是对磁盘的一种组织与管理了 比如数据怎么存放
flash文件系统有jffs yaffs(这个是专门针对nand) 等
当然你直接读取rad data也是可以的 比如u-boot烧到flash就是这样
但是如果你要把block type flash nand flash mount到某个结点并像一般文件那样访问里面的数据你就得用到文件系统
stage1 这个前面的446B与MBR前446B是相同的 这个是为了找到boot sector
xxfs_stage1_5 这个是加载到ram中的文件系统 如果没有它 就无法针对某个由xxfs格式的分区读写
显示开机选项
加载stage2 这个在MBR后32k处(忘记是不是这个数了) 开机后面的事情就都交给stage2了
内核加载运行
文件系统初始化 查找intrd.img(假定是这个名字 这个就是文件系统镜像了也就是你说的文件系统1)
intrd.img做什么呢
挂载 文件系统设备文件 如/proc /sys
生成相应的设备文件
开户一些系统服务
等等
没有这些 内核是跑不下去的 会panic掉
内核本身实现了一层VFS 对各种文件系统进行了抽象 这样可以支持很多文件系统
比如ext2 ext3现在到ext4了 这里的文件系统是对磁盘的一种组织与管理了 比如数据怎么存放
flash文件系统有jffs yaffs(这个是专门针对nand) 等
当然你直接读取rad data也是可以的 比如u-boot烧到flash就是这样
但是如果你要把block type flash nand flash mount到某个结点并像一般文件那样访问里面的数据你就得用到文件系统
#25
第一次 这么认真地敲这么多的字 linux有些问题的确令人很纠结
希望我说的对你有帮助
你不要把它跟kernel中的那个搞混了就是了
搞清楚你说的文件系统1 具体做了什么 会明白一些
希望我说的对你有帮助
你不要把它跟kernel中的那个搞混了就是了
搞清楚你说的文件系统1 具体做了什么 会明白一些
#26
楼上一堆牛人,膜拜~
#27
哎,问题解决……
结贴。
结贴。
#28
顶一个,好东西,我最近也对此甚是疑惑。呵呵,不过还是不太明白的,先收藏了,以后慢慢体会。
#1
存储设备本身也是有驱动的,比如硬盘和flash都有扇区的概念,这就是硬件驱动的事,由kernel加载。而文件系统说到底就是如何去读写这些扇区。理论上,没有文件系统,也能访问数据,比如直接读bootloader,又比如oracle的Raw分区等等。
kernel有一个虚拟的文件系统架构,包含了各种系统调用,比如read、write等等,不同的文件系统需要实现这些调用。所以说,文件系统不是一个文件,而是文件在硬件上存储和读取的系统。比如说每个文件占用多少个扇区,改文件占用的每个扇区的索引值等等。可以这么理解,文件系统就是管理这些扇区,将文件按一定规则存放到这些扇区里去。
所以,没有文件系统你也能访问硬件数据。比如说假设flash的设备是/dev/sda,直接去读/dev/sda这个文件的前512字节,就是读到了flash的第一个扇区的数据。
至于格式化,就是针对不同的文件系统,初始化一些扇区,比如预留某些扇区作为索引,某些扇区保留目录等等。
kernel有一个虚拟的文件系统架构,包含了各种系统调用,比如read、write等等,不同的文件系统需要实现这些调用。所以说,文件系统不是一个文件,而是文件在硬件上存储和读取的系统。比如说每个文件占用多少个扇区,改文件占用的每个扇区的索引值等等。可以这么理解,文件系统就是管理这些扇区,将文件按一定规则存放到这些扇区里去。
所以,没有文件系统你也能访问硬件数据。比如说假设flash的设备是/dev/sda,直接去读/dev/sda这个文件的前512字节,就是读到了flash的第一个扇区的数据。
至于格式化,就是针对不同的文件系统,初始化一些扇区,比如预留某些扇区作为索引,某些扇区保留目录等等。
#2
x86大哥来了。
呵呵
#3
X86全说了,支持。
#4
那我移植的“文件系统1”这个文件是怎么回事啊?
#5
接分。。。
我的“下载”里面有这方面的资料,可能有帮助。。。
我的“下载”里面有这方面的资料,可能有帮助。。。
#6
别可能啊,确定点!
#7
人呢,出来说两句啊!
#8
加载的是根文件系统,它是一个特殊的文件系统,它主要是为系统提供命令集、配置文件、设备文件等这些系统所需要的东西。而我们一般说的文件系统只是存储设备上数据的一个组织结构,也就是说是用户文件的组织。如果没有那个根文件系统,系统有许多功能实现起来不太方便。大致就是这样...
#9
不懂,突然发现X86神人来了,以前没遇到过。膜拜下
#10
就是说,在普通的存储设备(如pc的磁盘)上根文件系统可以直接为“存储设备上数据的一个组织结构”而在嵌入式中根文件系统是“主要是为系统提供命令集、配置文件、设备文件等这些系统所需要的东西”(被称为文件系统映像)这里的文件系统和flash设备无关。
在简单说就是我们的普通pc也可以不指定磁盘为根文件系统取而代之的是“文件系统映像”
#11
x86大哥已经说的很详细了。
#12
顶
#13
哦。详细归详细可我看不懂啊,对我来说还没有这个答案直接呢!
牛人当然要尊重!!!但对于问题本身来说跟谁提供的答案没关系。重要的是把问题彻底搞明白!!!!
牛人当然要尊重!!!但对于问题本身来说跟谁提供的答案没关系。重要的是把问题彻底搞明白!!!!
#14
不排除我太菜的可能!!!
我怎么感觉8楼那哥们回复的更贴近我的问题的本质。
我怎么感觉8楼那哥们回复的更贴近我的问题的本质。
#15
再怎么存储都是一堆二进制数据,这里是把整个文件系统做成一个映像文件,格式化过程太啰嗦,再写数据麻烦,直接烧写一个映像文件,bang!文件管理结构、文件数据。。。都有了
#16
不懂,特来支持...
#17
是不是说我把pc的文件系统做成ram disk形式的“文件系统映像”然后在grub中设置相应的参数,就可以让pc的内核加载ram disk根文件系统,而不是通常的加载硬盘分区作为根文件系统呢?
#18
沉了啊!!!
#19
主要是这个问题不好说。
#20
内核和根文件系统是不能单独用的,楼主学习下linux系统的基本原理就明白了。
#21
文件系统分为好几种,一种是根文件系统,比如romfs,j2ffs等,这些文件系统提供了许多命令行接口。在内核启动的时候进行挂载。当进入系统后实际上就是进入了根文件系统。
还有一种对文件系统的解释就是一种 如何组织外部存储器上文件存储,访问方式的系统,比如传统的ext2,ext3,ntfs等。一般也称为格式化方式。
还有一种对文件系统的解释就是一种 如何组织外部存储器上文件存储,访问方式的系统,比如传统的ext2,ext3,ntfs等。一般也称为格式化方式。
#22
我试验过了,按我说的可以让grub加载“根文件系统映像”。他的原理跟制作linux livecd似的。
livecd是通过 initrd 机制给内核先提供一个很微小的内存根文件系统。然后由该内存文件系统经过一系列的过程加载 squashfs 文件系统然后,内核将根文件系统切换到 squashfs
我们可以只启动 initrd 的内存文件系统,这个跟嵌入式的很相似!!!
下面写出grub的配置:
root (hd0,2)
kernel /boot/LINUX
initrd /boot/initrd.gz
上面的很多要根据实际情况设定,另外inited.gz可以自己制做或用livecd中的(我用的puppy linux中的)做好要保证你的kernel与inited.gz的一致性。
感觉这里的grub相当于u-boot、initrd.gz相当于“根文件系统映像”。
livecd是通过 initrd 机制给内核先提供一个很微小的内存根文件系统。然后由该内存文件系统经过一系列的过程加载 squashfs 文件系统然后,内核将根文件系统切换到 squashfs
我们可以只启动 initrd 的内存文件系统,这个跟嵌入式的很相似!!!
下面写出grub的配置:
root (hd0,2)
kernel /boot/LINUX
initrd /boot/initrd.gz
上面的很多要根据实际情况设定,另外inited.gz可以自己制做或用livecd中的(我用的puppy linux中的)做好要保证你的kernel与inited.gz的一致性。
感觉这里的grub相当于u-boot、initrd.gz相当于“根文件系统映像”。
#23
最好要保证你的kernel与inited.gz的一致性。
#24
先说说PC的grub:
stage1 这个前面的446B与MBR前446B是相同的 这个是为了找到boot sector
xxfs_stage1_5 这个是加载到ram中的文件系统 如果没有它 就无法针对某个由xxfs格式的分区读写
显示开机选项
加载stage2 这个在MBR后32k处(忘记是不是这个数了) 开机后面的事情就都交给stage2了
内核加载运行
文件系统初始化 查找intrd.img(假定是这个名字 这个就是文件系统镜像了也就是你说的文件系统1)
intrd.img做什么呢
挂载 文件系统设备文件 如/proc /sys
生成相应的设备文件
开户一些系统服务
等等
没有这些 内核是跑不下去的 会panic掉
内核本身实现了一层VFS 对各种文件系统进行了抽象 这样可以支持很多文件系统
比如ext2 ext3现在到ext4了 这里的文件系统是对磁盘的一种组织与管理了 比如数据怎么存放
flash文件系统有jffs yaffs(这个是专门针对nand) 等
当然你直接读取rad data也是可以的 比如u-boot烧到flash就是这样
但是如果你要把block type flash nand flash mount到某个结点并像一般文件那样访问里面的数据你就得用到文件系统
stage1 这个前面的446B与MBR前446B是相同的 这个是为了找到boot sector
xxfs_stage1_5 这个是加载到ram中的文件系统 如果没有它 就无法针对某个由xxfs格式的分区读写
显示开机选项
加载stage2 这个在MBR后32k处(忘记是不是这个数了) 开机后面的事情就都交给stage2了
内核加载运行
文件系统初始化 查找intrd.img(假定是这个名字 这个就是文件系统镜像了也就是你说的文件系统1)
intrd.img做什么呢
挂载 文件系统设备文件 如/proc /sys
生成相应的设备文件
开户一些系统服务
等等
没有这些 内核是跑不下去的 会panic掉
内核本身实现了一层VFS 对各种文件系统进行了抽象 这样可以支持很多文件系统
比如ext2 ext3现在到ext4了 这里的文件系统是对磁盘的一种组织与管理了 比如数据怎么存放
flash文件系统有jffs yaffs(这个是专门针对nand) 等
当然你直接读取rad data也是可以的 比如u-boot烧到flash就是这样
但是如果你要把block type flash nand flash mount到某个结点并像一般文件那样访问里面的数据你就得用到文件系统
#25
第一次 这么认真地敲这么多的字 linux有些问题的确令人很纠结
希望我说的对你有帮助
你不要把它跟kernel中的那个搞混了就是了
搞清楚你说的文件系统1 具体做了什么 会明白一些
希望我说的对你有帮助
你不要把它跟kernel中的那个搞混了就是了
搞清楚你说的文件系统1 具体做了什么 会明白一些
#26
楼上一堆牛人,膜拜~
#27
哎,问题解决……
结贴。
结贴。
#28
顶一个,好东西,我最近也对此甚是疑惑。呵呵,不过还是不太明白的,先收藏了,以后慢慢体会。