热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一种实现嵌入式Linux系统新方法

一种实现嵌入式Linux系统新方法--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
  摘要

  在Linux中会遇到由于文件系统损坏,需要人工修复而导致系统无法正常启动的现象。本文采用Linux初始化内存盘(INITRD)技术,并把内存的一部分作为Linux的根目录,每次启动把完整的文件系统解压到这里,避免了系统从损坏的文件系统启动。这不仅使系统能正常启动,而且提高了系统性能。

  引言

  在Linux操作系统中,有一项特殊的功能——初始化内存盘INITRD(INITial Ram Disk)技术,而且内核支持压缩的文件系统映像。有了这两项功能,我们可以让Linux系统从小的初始化内存盘启动,并把系统内存的一部分作为根文件系统挂载,而且不使用交换分区(如果不运行X Windows这是完全可以的),即把Linux系统完全嵌入到内存中,而不依赖于任何其他硬盘。现在PC机内存至少128M,而根文件系统所用的只有30MB,因此不仅不会使整机性能下降,反而有很大的提高。

  由于系统不工作在硬盘上,所以系统消除了由于机械驱动而导致的问题;因为系统运行于内存中,根文件系统和操作完全在CPU/RAM环境下,系统性能在速度和可靠性方面非常好;它不会由于非法关机而破坏文件系统,因为我们每一次启动是把压缩的文件系统解压至内存盘中作为根文件系统挂载。

  1 硬件要求

  对于这样一个系统,硬件不需要特别的设计,只是通过普通的PC机上的组件实现。值得一提是系统的内存的大小,它至少应该有64M。因为30M作为Ramdisk使用,剩下30多兆作为系统运行,才能保证系统的正常工作,我们现在的计算机内存一般为128M,这个条件都能满足。唯一特别的是一个flash盘 ,它相当于一个IDE接口的硬盘,大小为20M,主要用它作为启动LILO和放置根文件系统压缩包。

  2 Ramdisk的使用

  Ramdisk就是将内存的一部分分配为一个分区并作为硬盘来使用。对于系统运行时不断使用的程序,将它们放在Ramdisk中将加快计算机的操作,如大数据量的网络服务器、无盘工作站等。为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两个选项,一个是设定Ramdisk的大小,默认是4096k;另一个是initrd的支持。它既可以直接编译进内核,也可以编译成模块,在需要的时候加载。我们由于在启动时就用它,所以必须将它直接编译进内核。

  如果对Ramdisk的支持已经编译进内核,我们就可以使用它了。首先在/mnt目录下创建目录ram,运行mkdir /mnt/ram;然后对/dev/ram0创建文件系统,运行mke2fs /dev/ram;最后挂载上/dev/ram,运行mount /dev/ram /mnt/ram,就可以象对普通硬盘一样对它进行操作了。值得注意的是,在创建文件系统的时候,在屏幕上输出1024 inodes ,4096 blocks,即ramdisk大小为4M=4096个块,但是我们挂载上之后,用命令df ?k /dev/ram查看时,显示出来ramdisk大小只有3963K,这是由于文件系统本身占用了一些空间。

  我们能根据需要改变ramdisk地大小。如我们要把默认的4M增大到10M,当ramdisk是直接编译进内核的情况下,可在LILO配置文件lilo.conf中加入一行:append=“ramdis_size=10000”,运行LILO后,重启计算机后,ramdisk大小变为10M,或者在启动是作为启动行参数ramdis_size=10000;当ramdisk是作为可加载模块编译时,需要在模块加载配置文件/etc/modules.conf中加入一行:options rd rd_size=10000,或者在加载rd模块是在后面加上说明,即insmod rd rd_size=10000。

  3 实现过程

  3.1创建压缩的文件系统

  我们的实现过程是依赖于存在的Linux系统。首先启动一般的Linux系统,在这个系统中根据自己的需要,创建一个适合功能的文件系统。例如我们要实现Apache网络服务器,那么只要把完成系统启动和基本维护需要的一些命令、脚本、配置文件和库函数留下,再加上实现Apache服务器所需要的。具体过程为:

  在Linux下建立目录/minlinux,我们在此目录下创建的文件系统。系统的所有静态链接库,帮助手册(man pages),信息页(info pages),头文件,内核源码对于系统运行是完全无用的,所以不需要它们。在目录bin下放系统维护的一些基本工具,如ls、mv、grep、chown、chmod、chgrp、ln、rm等;在sbin下是系统启动过程通常需要的命令,如bash、e2fsck、mke2fs、fdisk、insmod、rmmod、depmod、modprobe、lsmod、shutdown、reboot、login、init、getty、mount、umount、等;usr/bin下放置Apache应用程序http和其他一些特殊工具。然后根据这些可执行文件需要的动态链接库来确定lib目录下的内容。当然目录etc下的配置文件,dev下的设备文件需要的都必须要有,它们都是和可执行文件对应的,因为许多可执行文件执行时,一般是打开设备,根据配置文件来运行。有一个特殊的目录proc应该设置,在内核编译选项文件系统选择中,我们选择对文件系统proc的支持,那么在系统运行之后它下面有许多内容,这些内容是实时、不断跟踪系统内核和正在运行的进程的状态而产生的,但不占用任何磁盘空间,而是驻留在内存中。在某些情况下,可以通过它来系统设置,许多工具从这里获取信息,如dmesg、ps、top等。文件系统制作完成,大小应该在20MB左右。

  接下来把文件系统拷贝至ramdisk为生成ramdisk映像文件做准备。我们把系统的ramdisk 改变到30M,重启计算机后,执行下列操作:
QUOTE:
推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
author-avatar
陈陈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有