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

远程登录

  • 远程登录是指通过网络在本地计算机(客户端)上操作远程计算机(服务器端)。
  • 在 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盘等)上文件和目录的一种机制。在对磁盘进行格式化时,会安装文件系统软件,将物理地址转换为用户可见的文件和目录结构,方便用户使用。

文件系统的作用

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

常见文件系统类型

如表格所示

平台文件系统类型特点
WindowsFAT16早期文件系统,支持较小的分区和文件(最大文件大小 2GB)。
FAT32更常用的 FAT 文件系统,文件大小上限为 4GB。
NTFS支持大文件、文件压缩、加密等高级功能,是 Windows 的主流文件系统。
ReFS适用于服务器,提供更高的数据完整性和可靠性。
LinuxEXT2不支持日志功能,简单高效,适合小型嵌入式系统。
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 镜像,完成启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值