ramdisk根文件系统+initramfs

这几天做了下ramdisk根文件启动实验,小结下。

测试环境:Ubuntu 12.04

首先我认为先制作根文件系统好,因为配置内核中有一项跟你制作的ramdisk大小有关。
这里我是直接使用原先制作好的根文件系统。

 

1.   制作ramdisk根文件系统镜像
    首先安装ext2文件系统的制作工具:
    #sudo apt-get install genext2fs
    跳转到你的rootfs文件系统所在目录,执行如下命令
    #genext2fs -b 4096 -d rootfs ramdisk
       -b是指制作的ramdisk大小为4096K字节
       -d是指要制作成ramdisk的根文件系统目录
    最后的ramdisk是制作出来的ramdisk的名字,当然可以改名的。
    注: 若出现genext2fs: couldn't allocate a block (no free space)这样的错误,则修改4096为8192
    #gzip -9 -f ramdisk
    该ramdisk以最优方式压缩为ramdisk.gz

2.  配置内核   
  
首先解压内核到工作目录,然后进入内核目录,执行如下语句。
  #sudo su
  #make menuconfig       (如ubuntu下的用户不能执行该命令则先执行如下命令 sudo apt-get install libncurses5-dev)
    General setup-->[*] Initial RAM filesystem and RAM disk support
                -->    [*]Optimize for size
    Device Drivers-->Block devices--><*>RAM block device support
   (4096)Default RAM disk size (kbytes)                   //如果你之前制作的ramdisk是8192kb的,则写成8192
    File system --> <*> Second extended fs support  //提供内核对ext2文件系统的支持
        退出保存配置。

    3.编译内核
    执行如下命令:
        #make clean
        #make uImage
    编译后生成的内核映像uImage位于当前目录下。将其拷贝到/nfs目录下
        #cp uImage /nfs

    4.用网线和串口线连接好开发板和电脑(暂不开启开发板),打开minicom:
            #sudo minicom
    接通开发板的电源,当出现如下字符后Hit any key to stop autoboot ,敲击键盘空格键进入uboot。
    
    6.使用uboot命令配置环境变量
            #setenv serverip 10.0.0.1             //对应主机IP地址
            #setenv ethaddr 00:26:6c:5a:a7:51  
       说明:该硬件地址是自己主机的硬件地址,在另一个终端下执行ifconfig eth0 查看
            #setenv ipaddr 10.0.0.2               //开发板IP地址
            #setenv bootargs initrd=0x81000000,0x200000 root=/dev/ram  rw  console=ttyS2,115200n8 mem=64M init=/linuxrc
       说明:意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x81000000处,文件大小为0x200000。  
       这里真的是相当的郁闷.....   我一开始下载完之后,总是在Uncompressing Linux....................................那里就停住了,搞了几天也不明所以....  主要是看的几篇文章在console=ttySx后面都没有写波特率,我也就没写。最后在后面加了个波特率就好了..  坑爹...  虽然还是不懂,为什么没写明波特率就不行了..  知道的跟我讲解下~~

            #saveenv
            然后复位下开发板,再次进入uboot。
           
    7.在另一个终端下执行如下命令配置主机ip地址
            #sudo ifconfig eth0 10.0.0.1

    8.继续回到minicom下测试网络是否可用
            #ping 10.0.0.1
    若打印输出语句host 10.0.0.1 is alive 表明网络可用  

    9.使用uboot下载内核和ramdisk并烧写。
            #nfs 0x82000000 10.0.0.1:/nfs/uImage  
            #nfs 0x81000000 10.0.0.1:/nfs/ramdisk.gz
       说明:ramdisk.gz的下载地址必须是你参数里设置的initrd对应的地址。

    10.启动内核
            #bootm 0x82000000

 PS:如果启动的时候出现如下问题:
Failed to execute /linuxrc.  Attempting defaults...
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.

原因可能是setenv bootargs initrd=0x81000000,0x200000 root=/dev/ram  rw  console=ttyS2,115200n8 mem=64M init=/linuxrc
中的ramdisk大小设置问题,将0x200000改成0x400000。

 

如果想将uImage和ramdisk进行烧写,可执行如下命令:

烧写uImage(烧写地址根据自己的开发板):

       #nand erase 00280000 400000          //擦除从0x00280000起大小为400000的空间
       #nand write 82000000 00280000 400000   //从0x82000000读取400000大小内容到0x00280000

烧写ramdisk:

       #nand erase 00780000 400000
       #nand write 81000000 00780000 400000

并设置启动命令:

      #setenv bootcmd nand read 82000000 00280000 400000 \; nand read 81000000 00780000 400000 \; bootm 82000000

 

 

initramfs根文件系统启动

现在基于Linux的发行版通常采用initramfs代替initrd,架构更简单,应用也更灵活一些。

首先需要做好rootfs这个简单的根文件系统目录。唯一需要修改的是initramfs根文件系统启动时执行的第一个程序是init,而不是linuxrc,所以在制作的根文件系统中需要添加一个init文件,相应的linuxrc文件就不再需要了。
按照如下方式修改根文件系统
            #cd /nfs/rootfs
            #ln -s bin/busybox init
这样就为busybox创建了一个软链接init,这个文件就是我们要创建的init文件。

然后配置内核只需配置如下选项即可:
 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support                              
         (/nfs/rootfs) Initramfs source file(s)     //括号中写明你的rootfs路径
编译生成uImage即可。

在设置uboot环境变量时,只需要改变bootargs变量
         #setenv bootargs console=ttys2,115200n8 mem=64M
其他步骤与ramdisk无差别。

参考:http://www.arm9home.net/read.php?tid-5610.html
       http://www.arm9home.net/read.php?tid-5645.html

转载于:https://www.cnblogs.com/zjfdbz/archive/2013/01/26/2877675.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库开启root用户远程登录

MySQL数据库开启root用户远程登录 如果mysql不支持远程连接&#xff0c;会出现提示&#xff1a;错误代码是1130&#xff0c;ERROR 1130: Host 192.168.0.10 is not allowed to connect to this MySQL server &#xff0c;解决此问题有以下2个方法&#xff1a;1、改表法&#x…

CentOS操作系统(LAMP)安装教程

http://hi.baidu.com/marvinchen/item/d4f358d971b5b3e054347f44 转载于:https://www.cnblogs.com/Joynic/articles/2881344.html

localToGlobal 本地转换全局

// localToGlobal 本地转换全局var square:Sprite new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(0, 0, 100, 100); square.x 100; square.y 200;addChild(square);square.addEventListener(MouseEvent.CLICK, traceCoordinates)functio…

viewController详解

一、生命周期当一个视图控制器被创建&#xff0c;并在屏幕上显示的时候。 代码的执行顺序 1、 alloc 创建对象&#xff0c;分配空间 2、init (initWithNibName) 初始化对象&#xff0c;初始化数据 3、loadView 从n…

Editplus For Python[转]

EditPlus是我常用的文件编辑器之一&#xff0c;用它来下脚本程序甚是方便&#xff0c;下面来看看如果配置吧&#xff1a; 1.先到www.editplus.com上下载editplus.exe&#xff0c;一步一步安装就好了&#xff0c;只有30天的试用期。 2.来配置python环境&#xff0c;到www.editpl…

硬件工程师在笔试中容易遇到的题目

名企硬件工程师面试考题大全 一、模拟电路 1、基尔霍夫定理的内容是什么&#xff1f;&#xff08;仕兰微电子&#xff09; 2、平板电容公式(CεS/4πkd)。&#xff08;未知&#xff09; 3、最基本的如三极管曲线特性。&#xff08;未知&#xff09; 4、描述反馈电路的概念&…

PyPyODBC 0.9.2发布 - 纯Python实现的pyodbc替代库

PyPyODBC发布了0.9.2版本&#xff0c;新版本加入了对Python 2.4的兼容性&#xff0c;加强了模块的健壮性&#xff0c;并修正了对Windows平台上Access MDB文件的创建和压缩功能。该模块的API语法尽力达到和著名的pyodbc库百分之百兼容&#xff0c;如果要在原有使用pyodbc的脚本上…

春节前51Aspx源码发布详情

材料科学与工程学院网站源码 2013-2-8 [VS2008] 本源码是为大学的一个学院网站定做的&#xff0c;现已经在某大学&#xff08;不提名&#xff09;网站上正式应用&#xff0c;且应用良好。本系统基于微软VS.net 2008 C# 、SQL Server2008&#xff0c;技术领先&#xff0c;完全模…

Java Swing 树状组件JTree的使用方法【图】

树中特定的节点可以由 TreePath&#xff08;封装节点及其所有祖先的对象&#xff09;标识&#xff0c;或由其显示行&#xff08;其中显示区域中的每一行都显示一个节点&#xff09;标识。展开 节点是一个非叶节点&#xff08;由返回 false 的 TreeModel.isLeaf(node) 标识&…

实测java 与php运行速度比较

java如下 public class aa{ public static void main(String[] args){ System.out.println(System.currentTimeMillis()"----"); int a0; int i; for(i0;i<10000000;i){ a; } System.out.println(System.currentTimeMillis()); } } php如下 <? echo microtime…

C#多线程学习(一) 多线程的相关概念

什么是进程&#xff1f; 当一个程序开始运行时&#xff0c;它就是一个进程&#xff0c;进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 什么是线程&#xff1f; 线程是程序中的一个执行流&#xff0c;每个线程都有自己的专有寄存器…

java多线程编程基础

thread和runnable已经out了。取而代之的是callable<V>,它的结果存在future<V>中。后者有get对象可以阻塞并最终获得异步结果。FutureTask既是callable又是future。可以作为一个执行单元。 直接启动一个thread执行callable是不明智的&#xff0c;因为太多的短命的线…

Linux网络管理实 验 指 导

Linux网络管理 实 验 指 导 实验一 TCP/IP网络接口配置 一、实验目的 ● 掌握Linux下TCP/IP网络的设置方法。 ● 学会使用命令检测网络配置。 ● 学会启用和禁用系统服务。 二、项目背景 某企业新增了Linux服务器&#xff0c;在但还没有配置TCP/IP网络参数&#xff0…

开发iOS即时通讯工具参考的一些开源、框架和教程

转&#xff1a;http://www.ctolive.com/space.php?uid927&doblog&id2277 下面收集了开发即时通讯工具&#xff0c;如AIM、ICQ(Oscar 协议)以及Jabber(XMPP协议)的iOS客户端程序的一些开源&#xff0c;可以直接使用或者参考&#xff1a;Oscar协议开发库LibOrange&#…

HA双机热备配置

HA&#xff08;高可用性集群&#xff09;当主机处于工作状态时&#xff0c;从机处于休眠状态&#xff0c;当主机宕机时&#xff0c;从机便会开始工作&#xff0c;让用户几乎感觉不到服务的中断&#xff0c;类似于网络路由配置中的备份。当主机存活时&#xff0c;所有的资源全在…

我的服装DRP之开发感悟

先向各位拜个晚年。 今年过年期间都在想DRP的事&#xff0c;很多朋友也联系我&#xff0c;讨论技术问题的、谋求合作的、分析行业前景的、让我提供源码和数据库的都有。再次谢谢朋友们的关心。目前来说&#xff0c;在修改系统bug的同时&#xff0c;我打算重新找一份工作&#x…

Linux配置

第3章 对Linux系统管理员的建议... 1 第4章 安装Linux操作系统... 2 第5章 初步认识Linux. 5 第6章 Linux系统的远程登陆... 13 第7章 Linux文件与目录管理... 19 第8章 Linux系统用户及用户组管理... 37 第9章 Linux磁盘管理... 45 第10章 文本编辑工具vim.. 70 第11章…

iOS开发那些事-iOS常用设计模式–委托模式案例实现

书接上回&#xff0c;应用案例 我们以UITextFieldDelegate为例来说明一下委托的使用。 UITextFieldDelegate是控件UITextField的 委托&#xff0c;控件的委托主要负责响应控件事件或控制其他对象。除了UITextField&#xff0c;WebView、UITableView等控件也有相应的委托对象。 …

python网络编程-一些常用有用的函数

socket.getservbyname(servicename[, protocolname]) –> integer 查询某个协议对应的端口号&#xff0c;需要使用两个参数&#xff0c;servicename对应端口名称&#xff0c;如 http&#xff0c; smtp&#xff0c;等。protocolname对应tcp&#xff0c;udp。 s.getsockname()…

LAMP环境的搭建

一、mysql的安装1、tar -zxvf mysql.gz2、mv mysql-5.1.49-linux-i686-glibc23/ /usr/local/mysql3、cd /usr/local/mysql4、useradd -s /sbin/nologin -M mysql5、mkdir -p /data/mysql6、chown -R mysql:mysql /data/mysql/7、./scripts/mysql_install_db --usermysql --data…