`
haoningabc
  • 浏览: 1477802 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

i386上的busybox

阅读更多
环境:在64位机器上总莫名其妙问题,交叉编译也会有想不到的地方,
反正是虚拟机,找了个32为的centos7安装

---------------------
yum install glibc-static -y
yum install ncurses ncurses-devel gcc gcc-c++  emacs -y
yum install glibc glibc-devel  glibc-static glibc-utils -y
yum install libgcc -y
yum install glib2-devel -y
yum install gcc* -y
export TOP=/root/jslinux
cd $TOP/busybox-1.23.2
#这步骤很重要,busybox不生成动态库
mkdir -pv ../obj/busybox-i386
make O=../obj/busybox-i386 defconfig
make O=../obj/busybox-i386 menuconfig
-> Busybox Settings
  -> Build Options
[ ] Build BusyBox as a static binary (no shared libs)
Go to that location, select it, save, and exit.
-> Busybox Settings
  -> Busybox Library Turning
    -> Support for /etc/networks
    -> vi-style line editing commands
    -> [*] Give more precise messages when copy fails (cp, mv etc) 
去掉Skip rootfs in mount table
-> Init Utilities
    -> Support reading an inittab file
    是否需要去掉
    Enable  writing to tty only by group, not by everybody

$ cd ../obj/busybox-i386
$ make -j16
$ make install

mkdir -p $TOP/initramfs/i386-busybox
$ cd $TOP/initramfs/i386-busybox
$ mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin}}
$ cp -av $TOP/obj/busybox-i386/_install/* .

vim init
-------------
#!/bin/sh
 
mount -t proc none /proc
mount -t sysfs none /sys
 
echo -e "\n  /init Boot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
#mdev 是 busybox 自带的一个 udev ,它是用于系统启动和
#热插拔或是动态加载驱动程序的时候,而自动产生设别节点的,
#这句话如果不加上的话,这需要手动的 mknod 来挂载设备节点
/sbin/mdev -s
exec /bin/sh
--------------------

chmod +x init

find . -print0  | cpio --null -ov --format=newc  | gzip -9 > $TOP/obj/initramfs-busybox-i386.cpio.gz

qemu-system-i386 -kernel bzImage -initrd initramfs-busybox-i386.cpio.gz -nographic -append "console=ttyS0" -enable-kvm
qemu-system-i386 -kernel bzImage -initrd initramfs-busybox-i386.cpio.gz  -vnc 0.0.0.0:1


-----------------------------
这个文件理论上是写到哪里都可以,append的时候指定一下
如果不写,则默认是/init
比如写到
/etc/init.d/rcS
等等,
这里我保存成/haha
-------------------
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo -e "\n Haoning Boot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
/sbin/mdev -s
exec /bin/sh
-------------------------

如果生成img

find . | cpio -o --format=newc > $TOP/obj/rootfs.img

这步骤有没有都行
gzip -c rootfs.img > rootfs.img.gz
#qemu-system-i386 -kernel bzImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/etc/init.d/rcS noapic" -vnc 0.0.0.0:1
qemu-system-i386 -kernel bzImage -initrd rootfs.img -append "root=/dev/ram rdinit=/haha noapic" -vnc 0.0.0.0:1  
#rdinit和init有区别
rdinit起作用,可以指定配置文件,init不行,默认找/init去了
qemu-system-i386 -kernel bzImage -initrd rootfs.img -append "root=/dev/ram rdinit=/haha noapic" -vnc 0.0.0.0:1  
qemu-system-i386 -kernel bzImage -initrd rootfs.img -append "root=/dev/ram0 rw rdinit=/sbin/init notsc=1" -vnc 0.0.0.0:1 

如果是
qemu-system-i386 -kernel bzImage -initrd rootfs.img -vnc 0.0.0.0:1

如果不用vnc 用命令行的方式,需要 -append "console=ttyS0" -nographic  配合使用

qemu-system-i386 -kernel bzImage -initrd rootfs.img -append "console=ttyS0" -nographic

会自动去找/init
console=ttyS0 与nographic 配合使用,如果使用vnc,则去掉console=ttyS0 否则不显示
qemu-system-i386 -kernel bzImage -initrd rootfs.img -append "root=/dev/ram0 rw init=/sbin/init notsc=1" -vnc 0.0.0.0:1

比如这个
qemu-system-i386 -kernel bzImage -initrd rootfs.img -append "console=ttyS0 root=/dev/ram0 rw init=/sbin/init notsc=1" -vnc 0.0.0.0:1
显示Decompressing Linux ... Parsing ELF... No relocation needed... done.
Booting the kernel.
就不动了
console=ttyS0 root=/dev/ram0 rw init=/sbin/init notsc=1 是jslinux.js里的代码
jslinux会把这个console定向到浏览器
我们编译的rootfs.img
进入系统后df -h 什么也没有,可能是不能作为hda的原因
###########################################################
退出 QEMU 操作为:Ctrl + A ,然后按下 X 键。注意,它不会提醒你是否要退出,而是直接退出,所以操作时要小心。
############################################################
测试
qemu-system-i386 -kernel linux-x86-basic/arch/i386/boot/bzImage -initrd  rootfs.img -append "console=ttyS0 root=/dev/ram0 rw rdinit=/jslinux notsc=1"  -nographic
echo ':DOSCOM:E::com::/usr/bin/runcom:' > /proc/sys/fs/binfmt_misc/register


下面不好使
qemu-system-i386 -kernel bzImage -hda rootfs.img -append "console=ttyS0 root=/dev/hda ro init=/sbin/init notsc=1" -vnc 0.0.0.0:1
console=ttyS0 root=/dev/hda ro init=/sbin/init notsc=1
console=ttyS0 root=/dev/ram0 rw init=/sbin/init notsc=1
qemu-system-i386 -kernel bzImage -hda rootfs.img -append "console=ttyS0 root=/dev/hda ro init=/init notsc=1" -vnc 0.0.0.0:1


备注
内核的 .config文件
CONFIG_TUN=y
         
分享到:
评论

相关推荐

    Building BusyBox(ramdisk)

    根据给定的文件信息,我们可以总结出利用BusyBox构建ramdisk根文件系统的详细步骤与相关知识点。 ### 一、概述 BusyBox是一个为嵌入式设备设计的小巧但功能强大的工具集,它将许多标准GNU/Linux命令和工具合并到一...

    破坏活动:基于musl libc和busybox的激进和实验性发行

    破坏Linux 这是Sabotage,它是基于musl libc和busybox的实验性发行版。 目前,Sabotage支持i386,x86_64,MIPS,PowerPC32和ARM(v4t +)。 ARM hardfloat(hf)通过stage1的交叉编译得到支持,因为它需要最新的GCC...

    制作自己的Linux_OS.doc

    - **BIOS读取MBR**:计算机开机时,BIOS会读取硬盘上的主引导记录(MBR),MBR中存放着一段小的引导程序。 - **加载引导程序**:MBR中的引导程序负责加载更大的引导程序,如LILO或GRUB等。 - **加载内核**:引导程序...

    linux根文件系统制作

    # SUBARCH:=$(shell uname -m | sed -e 's/i.86/i386/' -e 's/sun4u/sparc64/' \ # -e 's/arm.*/arm/' -e 's/sa110/arm/' \ # -e 's/s390x/s390/' -e 's/parisc64/parisc/' \ # -e 's/ppc.*/powerpc/' -e 's/...

    nfs服务器设置以及DSp DM6467T开发板连接测试

    #rpm -ivh nfs-utils-1.0.1-2.9.i386.rpm portmap-4.0-54.i386.rpm ``` `portmap`服务是用于处理RPC(Remote Procedure Call,远程过程调用)请求的服务,它是NFS服务正常运行所必需的。 2. **配置NFS共享目录**...

    移植Android到S3C6410

    1. **下载与安装**:从官方镜像站点下载Ubuntu 8.04.2的桌面版ISO文件,地址为:`http://mirror.lupaworld.com/ubuntu/releases/8.04/ubuntu-8.04.2-desktop-i386.iso`。将ISO文件刻录成光盘并进行安装。安装过程中...

    构建嵌入式驱动程序开发环境

    虚拟机是模拟硬件环境的工具,允许你在同一台计算机上运行多个独立的操作系统实例。安装完成后,下载并安装SSH Secure Shell Client,这是一个用于远程访问和管理系统的安全客户端。 接下来,你需要安装一个适合...

    嵌入式Linux和MiniGUI学习笔记.pdf

    - **5.1 移植Busybox**:Busybox是一个包含了众多常用Linux命令的单个可执行文件,这部分介绍了如何将Busybox移植到目标板。 - **5.2 移植Glibc库**:Glibc是GNU C库的简称,它为应用程序提供了标准C库功能。这部分...

    android底层核心服务编程

    - 下载ISO镜像`ubuntu-8.04.2-desktop-i386.iso`,刻录成光盘并安装。 - 需要有至少15GB的硬盘空间用于安装系统。 - 安装完成后,确保计算机能够连接互联网,并通过命令行安装必要的软件包。 - 命令示例: ```...

    S3C2410各种驱动源码

    | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数...

    Linux 设备驱动开发详解 代码

    | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数...

    linux内核驱动详解1

    | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数...

    linux内核驱动详解2

    | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数...

    tinycore linux installation guide

    TinyCore Linux基于 BusyBox 和 FLTK 图形用户界面,提供了最小的桌面环境和支持软件。 #### 二、TinyCore Linux特点 - **轻量级**: TinyCore Linux的核心系统仅有十几兆字节,适合资源有限的老旧计算机或嵌入式...

Global site tag (gtag.js) - Google Analytics