系统移植四和制作RAMDisk 文件系统

发布于:2024-10-12 ⋅ 阅读:(36) ⋅ 点赞:(0)

远程登录

  • 远程登录是指通过网络在本地计算机(客户端)上操作远程计算机(服务器端)。
  • 在 Linux 系统中,常用的远程登录工具包括 Telnet 和 SSH。下面是使用 Telnet 进行远程登录的配置方法。请注意:Telnet 由于传输内容不加密,安全性较低,在实际应用中通常使用 SSH 替代。这里只演示如何配置和使用 Telnet。
  • 具体步骤
    • 服务器端配置(开发板)
      • 服务器端是指嵌入式开发板,它运行 Telnet 服务器(telnetd),以允许客户端通过 Telnet 进行远程登录。我们通过修改启动脚本来让开发板启动时自动运行 Telnet 服务。
      • 步骤 1:在 /etc/init.d/rcS 中启动 Telnet
    vi /etc/init.d/rcS
    
    //在该脚本中添加启动 Telnet 服务的命令。在脚本的末尾添加以下内容以启动 telnetd
    telnetd &
    
    保存并退出编辑器。
    
      - 步骤2:配置登录账户
      	- 为了允许通过 Telnet 登录,必须确保系统中存在可以使用的用户。通常,我们会使用 root 用户进行登录,并设置空密码。
    
    vi /etc/passwd //打开 /etc/passwd 文件
    
    确保文件中有以下内容,表示用户 root 可以登录,密码为空
    root::0:0:root:/:/bin/sh
    
    保存并退出编辑器。
    
    • 客户端配置(虚拟机或本地计算机)
      • 客户端可以是虚拟机、个人电脑或者其他可以通过网络连接的设备。确保客户端和服务器端在同一个网络中,并且可以互相通信。
      • 步骤 1:使用 Telnet 连接服务器
        在客户端设备(如虚拟机)上打开终端。
        使用以下命令通过 Telnet 连接到开发板的 IP 地址(例如:192.168.2.245)
    telnet 192.168.2.245
    
    

如果 Telnet 连接成功,系统会提示你输入用户名。输入 root 并按回车

login: root

  • 因为我们在 /etc/passwd 中设置了空密码,直接按回车登录。

  • 登录成功后,你现在可以在远程开发板上执行命令,就像在本地终端中一样。
    - 步骤 2:退出 Telnet 会话
    - 当你完成远程操作后,可以通过输入 exit 命令来退出 Telnet 会话

exit

使用 SSH 替代 Telnet

由于 Telnet 的通信是明文传输,存在较大的安全风险,因此在生产环境中通常使用 SSH(Secure Shell)替代 Telnet。SSH 提供了更高的安全性,支持加密通信,并且可以使用密钥认证等安全机制。

  1. 安装 SSH 服务器(以 OpenSSH 为例)
    在开发板上运行以下命令安装 openssh 服务器
sudo apt-get install openssh-server
  1. 启动 SSH 服务器:
    启动 SSH 服务并设置为开机自动启动:
sudo systemctl start ssh
sudo systemctl enable ssh
  1. 客户端使用 SSH 连接:

在客户端设备上,使用以下命令通过 SSH 连接到开发板:

ssh root@192.168.2.245

这样就可以使用加密的方式安全地进行远程登录。

文件系统格式

  • 文件系统是操作系统用来管理存储设备(如硬盘、U盘等)上文件和目录的一种机制。在对磁盘进行格式化时,会安装文件系统软件,将物理地址转换为用户可见的文件和目录结构,方便用户使用。

文件系统的作用

每个存储设备(磁盘、分区)都需要安装一个文件系统,以便操作系统能够识别和管理其中的数据。
- 存储和管理文件的元数据:文件名、大小、权限等信息。
- 管理磁盘上的物理空间:确保文件存储在磁盘的正确位置并高效利用存储空间。

常见文件系统类型

如表格所示

平台 文件系统类型 特点
Windows FAT16 早期文件系统,支持较小的分区和文件(最大文件大小 2GB)。
FAT32 更常用的 FAT 文件系统,文件大小上限为 4GB。
NTFS 支持大文件、文件压缩、加密等高级功能,是 Windows 的主流文件系统。
ReFS 适用于服务器,提供更高的数据完整性和可靠性。
Linux EXT2 不支持日志功能,简单高效,适合小型嵌入式系统。
EXT3 支持日志功能,能有效避免系统崩溃后的数据丢失。
EXT4 更先进的文件系统,支持更大文件和分区,性能高。
嵌入式 Ramdisk 内存中的文件系统,访问速度快,断电丢失数据。
YAFFS2 适合 NAND 闪存,体积小、性能高,适合嵌入式设备。
JFFS2 日志文件系统,适用于闪存设备,支持数据压缩和磨损均衡。

制作RAMDisk 文件系统

  • RAMDisk 文件系统是将文件系统加载到内存中,具有访问速度快但数据易丢失的特点。以下是详细的制作 RAMDisk 文件系统的步骤,并在 NFS 测试通过后可以开始制作。
  1. 制作 8M 大小的镜像文件
    在用户主目录下创建一个大小为 8MB 的镜像文件,作为 RAMDisk 文件系统的基础:
$ cd ~
$ dd if=/dev/zero of=ramdisk bs=1k count=8192   # 创建一个大小为8MB的空文件

//if=/dev/zero:输入文件是 /dev/zero,即空数据。
//of=ramdisk:输出文件是 ramdisk,即我们创建的镜像文件。
//bs=1k:表示每次读取和写入 1KB 数据。
//count=8192:一共写入 8192 个块,因此生成的文件大小为 8MB。
  1. 格式化镜像文件为 ext2 文件系统
    将创建的镜像文件格式化为 ext2 文件系统:
 mkfs.ext2 -F ramdisk
//-F:强制格式化该文件为 ext2 文件系统。
  1. 创建挂载点
    在 /mnt 目录下创建一个 initrd 目录,作为镜像文件的挂载点:
sudo mkdir /mnt/initrd
  1. 将镜像文件挂载到 /mnt/initrd 下
    将格式化好的 ramdisk 文件挂载到 /mnt/initrd 下,以便后续操作文件:
sudo mount -t ext2 ramdisk /mnt/initrd

注意:ramdisk 文件不能放在根文件系统(rootfs)目录中,防止循环挂载的问题。

  1. 将测试好的文件系统复制到 RAMDisk 中
cat  /etc/exports//最后一行就是测试好的文件系统位置(NFS服务器位置)
//NFS 挂载了文件系统

将已测试好的文件系统中的所有文件复制到挂载点 /mnt/initrd 中

sudo cp -a xxx/rootfs/* /mnt/initrd
//sudo cp -a /home/ubuntu/source/rootfs/* /mnt/initrd

-a:保留文件属性并递归复制目录下所有内容。

  1. 卸载挂载点
    文件复制完成后,卸载挂载点 /mnt/initrd:
sudo umount /mnt/initrd
  1. 压缩 RAMDisk 文件
    将 RAMDisk 文件压缩为 ramdisk.gz,以减小文件大小
gzip --best -c ramdisk > ramdisk.gz

--best:使用最高级别的压缩。
-c:将输出写入标准输出,并重定向到 ramdisk.gz 文件中。

然后将压缩后的文件拷贝到 /tftpboot 目录,方便后续通过网络引导:

cp ramdisk.gz /tftpboot
  1. 制作 U-Boot 识别的格式
    将 ramdisk.gz 文件转换为 U-Boot 可识别的镜像格式(ramdisk.img):
mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
-n:设置镜像的名称,这里为 "ramdisk"-A arm:指定处理器架构为 ARM。
-O linux:目标操作系统为 Linux。
-T ramdisk:类型为 RAMDisk。
-C gzip:使用 gzip 压缩格式。
-d:指定要包含的文件,这里为 ramdisk.gz。

然后将生成的 ramdisk.img 复制到 /tftpboot:

cp ramdisk.img /tftpboot
  1. 配置内核支持 RAMDisk
    要让内核支持 RAMDisk 作为启动文件系统,需要在编译内核时启用相关选项。
    9.1 运行 make menuconfig 配置内核:
make menuconfig  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

9.2 配置文件系统和设备驱动支持:

  • 文件系统(File systems):
<*> Second extended fs support
  • 设备驱动(Device Drivers):
    • SCSI 设备支持:
    SCSI device support  --->
        <*> SCSI disk support
    
    • 块设备支持(Block devices):
    Block devices  --->
        <*> RAM block device support
        (16) Default number of RAM disks  # 默认的 RAM 磁盘数量为 16
        (8192) Default RAM disk size (kbytes)  # 设置默认 RAMDisk 大小为 8MB(8192KB)
    
    • 通用设置(General setup):
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

9.3 重新编译内核并将新的内核镜像复制到 /tftpboot:

 make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
cp arch/arm/boot/uImage /tftpboot
  1. 重新烧录 RAMDisk 并启动
    最后一步是通过 U-Boot 重新加载并启动 RAMDisk 文件系统。
    在 U-Boot 中,加载内核、设备树和新的 RAMDisk:
tftp 0x41000000 uImage
tftp 0x42000000 exynos4412-fs4412.dtb
tftp 0x43000000 ramdisk.img
bootm 0x41000000 0x43000000 0x42000000

这里分别加载内核(0x41000000)、RAMDisk 镜像(0x43000000)和设备树(0x42000000)。

总结
  1. 制作 RAMDisk 文件系统:
    • 通过 dd 命令创建 RAMDisk 镜像文件,并格式化为 ext2 文件系统。
    • 将已测试好的根文件系统复制到 RAMDisk 中,并压缩镜像为 ramdisk.gz。
  2. 配置内核支持 RAMDisk:
    • 使用 make menuconfig 配置内核以支持 RAMDisk,并设置默认的 RAM 磁盘大小。
    • 重新编译内核并将内核和 RAMDisk 镜像上传至 /tftpboot,方便后续通过 U-Boot 启动。
  3. 启动流程:
    • 使用 U-Boot 通过网络引导加载内核、设备树和 RAMDisk 镜像,完成启动。

网站公告

今日签到

点亮在社区的每一天
去签到