当前位置:首页 » 操作系统 » ramlinux

ramlinux

发布时间: 2025-06-14 01:37:15

❶ 嵌入式linux系统的启动流程是什么样的

1)
初始化
RAM
因为
Linux
内核一般都会在
RAM
中运行,所以在调用
Linux
内核之前
Bootloader
必须设置和初始化
RAM,为调用
Linux内核
做好准备。初始化
RAM
的任务包括设置
CPU
的控制寄存器参数,以便能正常使用
RAM
以及检测RAM
大小等。
2)
初始化串口端口

Linux
的启动过程中有着非常重要的作用,它是
Linux内核和用户交互的方式之一。Linux
在启动过程中可以将信息通过串口输出,这样便可清楚的了解
Linux
的启动过程。虽然它并不是
Bootloader
必须要完成的工作,但是通过串口输出信息是调试
Bootloader
和Linux
内核的强有力的工具,所以一般的
Bootloader
都会在执行过程中初始化一个串口作为调试端口。
3)
检测
处理器类型
Bootloader在调用
Linux内核前必须检测系统的处理器类型,并将其保存到某个常量中提供给
Linux
内核。Linux
内核在启动过程中会根据该处理器类型调用相应的初始化程序。
4)
设置
Linux启动参数
Bootloader在执行过程中必须设置和初始化
Linux
的内核启动参数。
5)
调用
Linux内核映像
Bootloader完成的最后一项工作便是调用
Linux内核。如果
Linux
内核存放在
Flash
中,并且可直接在上面运行(这里的
Flash

Nor
Flash),那么可直接跳转到内核中去执行。但由于在
Flash
中执行代码会有种种限制,而且速度也远不及
RAM
快,所以一般的
嵌入式系统
都是将
Linux内核拷贝到
RAM
中,然后跳转到
RAM
中去执行。

❷ 请问armlinux在启动过程中是先加载驱动还是先挂载文件系统

Linux内核一般都答亩携会在RAM中运行,所以在调用Linux内核之前bootloader必须设置和初始化清伏RAM,上电或复位后从flash读取bootloader,通过bootloader初始化RAM,初始化串口,检测处理器类型,设置Linux启动耐茄参数,调用Linux内核映像。在bootloader将Linux内核映像拷贝到RAM以后,可以通过下例代码启动Linux内核:call_linux(0,machine_type,kernel_params_base)。machine_tpye是检测出的处理器类型,kernel_params_base是启动参数在RAM的地址。建议阅读linux相关书籍比如说《linux就该这么学》。

❸ Linux初始RAM磁盘(initrd)概述

什么是初始RAM磁盘?初始RAM磁盘是在实际根文件系统可用之前装载的初始根文件系统,它绑定到内核,并作为内核引导过程的一部分加载。然后,内核挂载这个初始RAM磁盘,作为两阶段引导过程的一部分,以加载模块,使真正的文件系统可用,并获得真正的根文件系统。initrd包含一组最小的目录和可执行文件来实现这一点,比如insmod将内核模块安装到内核中的工具。对于桌面或服务器Linux系统,initrd是一个临时文件系统,它的生命周期很短,只能作为通向真正的根文件系统的桥梁。在没有可变存储的嵌入式系统中,initrd是永久的根文件系统。

创建初始RAM磁盘的方法会有所不同,根据您运行的Linux版本。在Fedora Core 3之前,initrd是使用环路设备。根据Linux版本,initrd映像可以是压缩的cpio归档文件或者使用环路设备将文件作为块设备挂载。检查initrd映像的内容可以通过挂载到/mnt/initrd子目录进行。对于Fedora Core 3及更高版本,initrd是一个压缩的cpio归档文件,内容包括根目录下的init文件,以及其他必要的应用程序。

用于创建initrd的工具包括cpio命令和mkinitrd实用工具。使用cpio命令,您可以操纵cpio文件格式,这是一个文件格式,它允许ASCII和二进制文件。创建initrd映像时,首先创建一个空文件,使用/dev/zero作为输入写入ramdisk.img文件。然后使用mke2fs命令使用空文件创建ext2文件系统。现在这个文件是一个ext2文件系统,使用循环设备将文件挂载到/mnt/initrd。在挂载点,您现在有了一个代表ext2文件系统的目录,您可以为initrd填充这个目录。接下来创建构成根文件系统的必要子目录,如/bin、/sys、/dev和/proc。使用BusyBox和uClibc来实现超小尺寸的根文件系统,并创建init脚本、特殊设备文件和linuxrc文件。最后,您的根文件系统就完成了,它被卸载,然后使用gzip压缩生成的文件复制到/boot子目录,这样它就可以通过GNU GRUB加载。

构建初始RAM磁盘的步骤包括:创建空文件、使用mke2fs创建ext2文件系统、使用循环设备将文件挂载到/mnt/initrd、填充目录、创建根文件系统子目录、使用BusyBox和uClibc实现根文件系统、创建init脚本、特殊设备文件和linuxrc文件、使linuxrc文件成为可执行文件、创建符号链接指向BusyBox实用程序、复制/dev子目录的文件、生成linuxrc文件并使其成为可执行文件、创建少量特殊设备文件、创建根文件系统并挂载/proc文件系统、向控制台发出消息、请求ash以与根文件系统进行交互、使linuxrc文件成为可执行文件、使用gzip压缩生成的文件复制到/boot子目录。

测试自定义初始RAM磁盘时,您的新initrd映像在/boot中,所以下一步是用您的默认内核测试它。您现在可以重启您的Linux系统了。当GRUB出现时,按C键启用GRUB中的命令行实用程序。现在,您可以与GRUB交互来定义要加载的特定内核和initrd映像。当这些被定义时,使用boot命令来引导内核。

内核如何识别和挂载initrd作为其根文件系统?引导加载程序(如GRUB)识别要加载的内核,并将这个内核映像和任何相关的initrd复制到内存中。内核和initrd映像被解压缩并复制到内存中之后,内核被调用。执行各种初始化,最终,您会发现自己处于init/main.c:init()函数中。这个函数执行大量的子系统初始化。这里发出一个呼叫init/do_mounts.c:prepare_namespace(),用于准备名称空间(挂载dev文件系统、RAID或md设备,最后是initrd)。加载initrd是通过调用init/do_mounts_initrd.c:initrd_load()函数。

initrd加载和安装中主要功能的层次结构如下:引导加载程序识别并复制内核映像和initrd到内存中,内核被调用并执行初始化,调用init/do_mounts.c:prepare_namespace()用于准备名称空间,调用init/do_mounts_initrd.c:initrd_load()加载initrd,initrd_load()函数调用init/do_mounts_rd.c:rd_load_image()并确定要加载的RAM磁盘映像格式,然后解压缩RAM磁盘映像并将其加载到内存中,以适合挂载的块设备形式拥有initrd映像。现在以root用户身份挂载块设备,首先调用init/do_mounts.c:mount_root(),创建根设备,然后调用init/do_mounts.c:mount_block_root(),从这里,init/do_mounts.c:do_mount_root()被调用,它调用fs/namespace.c:sys_mount()实际挂载根文件系统,然后chdir()将目录更改为根目录。最后,调用init/main.c:run_init_process()启动init进程,它执行linuxrc文件,引导系统进入运行状态。

无盘引导场景中,引导内核和RAM磁盘根文件系统不需要本地磁盘,动态主机配置协议(DHCP)用于识别网络参数,普通文件传输协议(TFTP)将内核映像和初始RAM磁盘映像传输到本地设备,然后引导Linux内核并挂载initrd。

构建嵌入式系统的initrd映像时,可以使用一些技巧来减小其大小,如使用BusyBox(在本文中演示)、选择小型库(如uClibc或dietlib)并重新编译二进制文件。构建后的initrd映像可以作为安装在RAM磁盘中的非持久性根文件系统使用。

热点内容
服务器如何隐藏任务栏 发布:2025-06-14 17:26:24 浏览:175
存储卡未格式化 发布:2025-06-14 17:21:33 浏览:942
编程之夏 发布:2025-06-14 17:15:47 浏览:740
ae运行脚本 发布:2025-06-14 17:13:20 浏览:485
舰c缓存多大 发布:2025-06-14 16:41:27 浏览:687
新中大软件修改服务器ip地址 发布:2025-06-14 16:31:59 浏览:224
致信服务器ip 发布:2025-06-14 16:27:17 浏览:821
keilarm编译器 发布:2025-06-14 16:27:15 浏览:169
反编译工具可以进抓包么 发布:2025-06-14 16:17:15 浏览:789
ipad分享wifi密码是多少 发布:2025-06-14 16:14:59 浏览:778