阅读说明

该系列文章,基于的平台均为Tiny4412SDK 1312;4G emmC; 1G DDR3

带@lamar: 前缀的表示终端里面的命令
带@tiny4412: 前缀的表示开发板终端里的命令

准备

  1. tiny4412 开发板
  2. ubuntu 12.04
  3. busyBox源码包:busyBox-1.22.1.tar
  4. SD卡、串口线

开始

==>>1. SD卡分区和格式化
主要分出两个分区,一个分区用来存放内核的zImage镜像文件;另一个分区用来存放文件系统,也就是本文提到的主角。
分区创建如下(需要注意自己的SD卡挂到哪一个设备上):

创建完分区之后,需要关机重启,对各个分区进行格式化。其中,kernel分区格式化城fat32;文件系统格式化成ext2。使用如下命令即可:

==>>2. busyBox编译事项
@lamar: tar xvf busyBox-1.22.1.tar
@lamar: cd busyBox-1.22.1; make menuconfig

1) 配置动态链接库和设置编译器前缀
进入BusyBox Setting菜单后进入Build Options菜单


这里编译器是arm-linux-gcc,所以前缀填arm-linux-,这里选择动态链接库,链接的是arm-linux-gcc的库,后面要从安装arm-linux-gcc的地方考出要用到的库。

2) 配置安装路径

在这里面,可以选择相对路径或者绝对路径

3) 配置模块命令
进入Linux Module Utilities

这边需要注意,先去掉 Simplified modutils 选项,然后选择 insmod,rmmod,lsmod,modprobe

4) 保存配置
进入Save Configuration to an Alternate File菜单

最后使用如下命令,进行编译即可:
@lamar: make -j; make install;

该配置过程,参考出处
http://www.jb51.cc/article/p-geabknbh-bhx.html

==>>3. 完善基本的配置文件并拷贝根文件系统
编译之后,会在你之前设置的安装路径下,生成如下产物:

接下来我们,需要配置一些基本的文件,让内核能够正常引导根文件系统。
1) @lamar: cd ../root_fs; mkdir dev etc sys proc mnt tmp; //创建基本的目录结构

//创建rcS文件
2) @lamar: cat > etc/init.d/rcS << EOF (rcS:run command Start)
mount -t ramfs none /dev
mount -t sysfs none /sys
mount -t proc none /proc
mount -t tmpfs none /tmp
/sbin/mdev -s
EOF

3) @lamar: mknod dev/console c 5 1 //设置终端结点

//创建inittab文件
4) @lamar: cat > etc/inittab << EOF
::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh #/bin/sh前面的-表示sh会默认加载/etc/profile
EOF

//创建profile文件
5) @lamar: cat > etc/profile << EOF
export PS1=”[lamar@root \W]# ” #设置命令提示前面的那段文字
EOF

6) @lamar: mkdir lib; cp /toolschain/4.5.1/arm-none-linux-gnueabi/lib/* lib //拷贝支持busyBox的编译库,一般就是本地的编译lib库
7) @lamar: chmod 777 -R root_fs/ //修改文件权限
8) @lamar: mount /dev/sdb3 /mnt //挂载需要存放根文件系统的SD卡分区
9) @lamar: cp -rf root_fs/* /mnt //文件拷贝
10) @lamar: umount /mnt //卸载

==>>4. 配置bootargs环境变量
做完了以上所有的步骤,现在我们就可以在板子上进行验证了。首先我们需要配置bootargs,进入uboot,配置如下:
@tiny4412: set bootargs “root=/dev/mmcblk0p3 console=ttySAC0,115200 lcd=S70” //mmcblk0p3表示的mmc0的第三块分区,这一个根据你之前的分区情况来决定。
最后的效果如下(perfect~):

在此之后,我们就可以在此基础上,最一些有针对性的功能开发。

该配置过程,参考出处
http://www.mamicode.com/info-detail-503943.html

补充

==>>内核镜像的拷贝和设置开机bootcmd 1) 如上,已经对SD卡进行了分区和格式化(注意内核的分区是格式化成mkfs.vfat); 同样的,我们只需要挂载设备,然后,拷贝内核到挂载的目录即可。 2)配置bootcmd @tiny4412: set bootcmd “fatload mmc 0:2 0x40008000 zImage;bootm 0x40008000” //mmc 0:2 表示mmc0上第二块分区 @tiny4412: save 通过以上配置,就可以实现每次开机之后,系统自动去SD卡里启动内核。改善了DNW每次只能启动一次内核的问题。

【Tiny4412--4】基于busybox的简单根文件系统构建的更多相关文章

  1. Android用户空间文件系统驱动程序在无根设备上?

    我可以编写一个自定义的用户空间文件系统,可以通过标准的可用实用程序在无根工厂设备上运行?

  2. 如何在BusyBox容器中打印unix工具版本?

    我无法确定如何在BusyBox容器中打印版本:有什么建议吗?许多热的容器都建在BusyBox的顶部,我最好能做到这一点。

  3. 内核升级CentOS 5.3 mount:找不到文件系统’/ dev / root’

    我愿意在这一点上尝试任何事情.关于这个问题的另一个有趣的事情是,在新版本的内核中,在启动过程中它会抱怨dm-mapper启动两次,然后就会发生恐慌.我已经尝试过其他内核版本,结果是一样的.我在这里想念的是什么?

  4. 如何在CentOS中的两个驱动器上创建一个大的分区?

    我有一个新的专用服务器,我想纯粹用于备份目的.我想保持tmpfs和/boot不变,并创建一个大的~4TB分区.我知道这是相对简单的东西,但我真的很感激手走过它,因为我之前从未做过任何linux分区的东西,并且不想弄乱这个全新的盒子……非常感谢您需要使用LVM首先,您必须意识到,如果任何物理磁盘发生故障,Big4TB卷也将失败.先备份您的数据!

  5. filesystems – CentOS 5.5下16TB的哪个文件系统?

    我应该只使用一个还是几个fss?我想最小化fsck或check_xfs的时间.绝对是XFS.XFS初始化速度更快,性能非常出色,而且XFS已经被用于多TB的数量.我目前支持230台具有8到76TBXFS卷的机器.十几个是通过LVM聚合的两个或多个RAID卷构建的,没有问题,所以这是足够安全的.xfs_check速度主要取决于文件数量.对于典型的大容量,xfs_repair只需不到15分钟,因为系统有足够的内存,如8GB或更多.

  6. CentOS – 跳过“检查根文件系统”

    每次重新启动时,我都会在“检查根文件系统”时挂起8小时的CentOS盒子.有没有办法跳过那张支票?

  7. Ubuntu服务器,gpt分区表,mdadm,grub启动失败

    为什么grub无法启动?我认为我需要安装它的是一个单独的/boot,它不在LVM或软件RAID中,因为我的root是在RAID中,而分区表是GPT.UbuntuCD安装程序如何安装它没有这个问题,没有bios_grub设置?/vmlinuz是一个使用启动分区的符号链接,启动分区已损坏.bios_grub代码是在ext3结构的基础上编写的.这可能意味着没有挂载/boot,并且在那里看到的grub文件实际上在根系统上,而不包含内核.为什么grub不想在没有这个

  8. 除了“解压缩”之外,还有其他选项可以在Ubuntu中解压缩文件吗?

    我的系统管理员现在无法访问,我在服务器上有一个压缩文件,我想解压缩…但是,我们目前没有安装zip和unzip,而且我没有root权限来安装它们...我完全没有选择吗?还有其他东西可以解压缩这个文件吗?

  9. ubuntu – 安装XFS分区,块大小&lt;4k

    我有一个64k块大小的XFS分区.但是当blockize是4k的默认值时,我只能在Ubuntu10.10中挂载它.如何使用较大的块大小安装分区?这有效:这不起作用:这是因为Linux允许您创建具有大块大小的XFS分区,但只能安装块大小等于或小于内存页大小的XFS分区.在所有预编译的公共发行版内核中设置的内存块大小为4KB.使用getconfPAGE_SIZE进行检查.您可以将其设置得更高,但它需要编译您自己的内核.

  10. Preseed Ubuntu / Debian – 分区:防止“分区1不在物理扇区边界上开始”.

    Ubuntu/Debian的预置工作正确–系统可启动.但fdisk-l正在产生以下结果:我在preseed中的当前分区参数是:如何避免分区{n}无法启动物理扇区边界错误.在预播期间如何在partman中设置正确的起始扇区和扇区大小?将您的d-ipartman/alignment参数更改为最佳而不是圆柱.这应该可以解决问题.

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部