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

使用buildroot为jslinux创建root.bin

阅读更多
环境
gcc 版本 4.8.5 centos 7.2.1511 (AltArch) 内核版本3.10.0-327.13.1 32位操作系统
buildroot版本buildroot-2016.02
########################

使用buildroot生成jslinux的root.bin文件
由几个关键点:

1.jslinux.js里面有一行
pc.cpu.write_string(cmdline_addr, "console=ttyS0 root=/dev/ram0 rw init=/sbin/init notsc=1");

这里的sbin/init要改
默认可能会走/etc/init.d/rcS 等地方如果init改成rdinit按理可以指定其他地方的配置文件
编辑文件后需要chmod +x <initfile>

2.需要/dev下面的设备文件,在init文件里面/sbin/mdev -s即可
如果缺少的手工mknod 创建

3.需要mount /sys和/proc文件系统

4.注意观察 /etc/fstab /etc/mtab /etc/inittab

5.使用initrd的时候,不能超过4M.
如果img文件大于4M,需要使用ramdisk_size
这个qemu选项
#####################

make menuconfig
->Target options
-->Target Architecture 选i386 第三个选i686
->Filesystem images
-->ext2/3/4 variant (ext2 rev0) 选ext2
-->tar the root filesystem
-->Compression method(gzip) 选gzip
->build Option
-->libraries (shared only)
##->Toolchan
##-->C Libary(glibc) 不能用这个
->Target Package
-->Networking applications--> pppd iputils vtun socat等网络需要的工具 (这个最重要,不加这里,rootfs.ext2可以小于4M)

make

make会下一堆东西,
如果第二次编译,可以把buildroot-2016.02/dl 中的包都考过去节省时间

注意:得到的rootfs.ext2不能超过4M,否则不能作为ram挂载

yum install patch -y
#编译出错可能需要需要这个补丁(pthread.h找不到的问题,偶尔遇到)
../../../libgcc/generic-morestack-thread.c:41:21: fatal error: pthread.h: No such file or directory
#include <pthread.h>
https://gcc.gnu.org/bugzilla/attachment.cgi?id=28902&action=edit
内容复制到mypatch
patch -p1 < mypatch
./output/build/host-gcc-final-4.9.3/libgcc/generic-morestack-thread.c
在把带pthread_t的函数全注释掉


生成rootfs.ext2

mkdir tmp
mount -o loop rootfs.ext2 tmp

需要改几个地方
sbin/init
改成:
---------------------------------
#!/bin/sh

echo "\n /sbin/init hello jslinux  sbin/init \n"
mount -t proc none /proc
mount -t sysfs none /sys

/sbin/mdev -s

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
export HOME=/root
export TERM=vt100

#mount -a

ifconfig lo 127.0.0.1

#sleep 2
# allow running DOS .COM executables with the small 'runcom' utility
#echo ':DOSCOM:E::com::/usr/bin/runcom:' > /proc/sys/fs/binfmt_misc/register

cd $HOME

stty -F /dev/ttyS0 rows 30

#show_boot_time

echo "Welcome to hahaha haoning JS/Linux"

#while /bin/true; do

 # echo "setsid sh ----->"
 # setsid sh -c 'exec sh </dev/ttyS0 >/dev/ttyS0 2>&1'

#done
echo "this will run /bin/sh"
exec /bin/sh
echo "linux start up ,hahahahah haoningge"
-----------------------------

注意,/dev下的设备文件是由mdev -s生成的
/proc /sys需要挂载,
生成的/dev下面可能会缺需要的交互设备/dev/jsclipboard 和/dev/net/tun等去 jslinux上ls -l一下
没有的可以这样建立

https://github.com/Pivosgroup/buildroot-linux-kernel/blob/master/Documentation/networking/tuntap.txt

mknod -m 666 /dev/null c 1 3
mkdir /dev/net (if it doesn't exist already)
mknod /dev/net/tun c 10 200
mknode /dev/jsclipboard c 10 231
mknod /dev/ppp c 108 0


################
建立
/ppp_up
#---------------
#!/bin/sh
pppd /dev/ttyS1 noauth defaultroute usepeerdns
#-------------


#如果buildroot没有选net相关
#运行的时候可能会缺某些/lib下的库,不建议这样,最好编译
#ln -s libcrypt-1.0.12.so libcrypt.so.0
#ln -s libdl.so.1 libdl.so.0
#ln -s libc.so.1 libc.so.0

注意观察/etc/init.d/rcS 和网络相关的配置文件

把生成的rootfs.ext2覆盖到root.bin的位置即可
github上的两个工程可用
jsmodem和
jslinux-deobfuscated

退出qemu
Ctrl-a x



busybox的cpio的方式可以让qemu 的initrd方式运行
但是buildroot的不行,buildroot不加网络可以控制在4M以内,ram0方式是可以的,buildroot的直接放给 jslinux即可

使用qemu跑这个img的话:qemu不需要修改/sbin/init,是jslinux需要
qemu-system-i386 -kernel /root/jslinux/obj/linux-x86-basic/arch/i386/boot/bzImage -hda  rootfs.ext2 -append "console=ttyS0 root=/dev/sda rw init=/sbin/init notsc=1"  -nographic

注意root=/dev/sda 为sda
因为rootfs.ext2大于4M,如果buildroot不编译pppd,可以达到2.1M,这样可以直接用
qemu-system-i386 -kernel /root/jslinux/obj/linux-x86-basic/arch/i386/boot/bzImage -initrd  rootfs.ext2 -append "console=ttyS0 root=/dev/ram0 rw rdinit=/sbin/init notsc=1"  -nographic


而使用root=/dev/hda 会报错误


使用sda后
正确结果


只加pppd的,5.7M
1.jslinux-bellard
2.jslinux-network 支持
pc.cpu.write_string(cmdline_addr, "console=ttyS0 root=/dev/hda ro init=/sbin/init notsc=1");//zuichu haohsi 必须是ro,rw不行
3.jslinux-deobfuscated 需要加个参数 ramdisk_size=128000 支持超过4M的内存启动文件
pc.cpu.write_string(cmdline_addr, "console=ttyS0 root=/dev/ram0 rw init=/sbin/init notsc=1 ramdisk_size=128000");
4.jsmodem

##############QEMU BUILDROOT RAMDISK: IMAGE TOO BIG!########################
https://draskodraskovic.wordpress.com/2013/05/07/qemu-buildroot-ramdisk-image-too-big/
ramdisk_size` kernel argument has to be augmented.

Resolution :
drasko@Mali:~/buildroot/output/images$ qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.ext2 -append “ramdisk_size=128000”

References :
http://www.minimyth.org/forum/viewtopic.php?t=2594&f=5
http://linuxpmi.org/trac/wiki/Testing



最终结果为



###################附加,如果是ubuntu上#####
----------ubuntu-----------
make menuconfig
apt-get install make gcc g++ libncurses5-dev unzip -y
make menuconfig
->Target options
-->Target Architecture 选i386 第三个选i686
->Filesystem images
-->ext2/3/4 variant (ext2 rev0) 选ext2
-->tar the root filesystem
-->Compression method(gzip) 选gzip
->build Option
-->libraries (shared only)
##->Toolchan
##-->C Libary(glibc) 不能用这个
#->Target Package
#-->Networking applications--> pppd iputils vtun socat等网络需要的工具 (这个最重要)

make


附加没用的信息
vim include/platform.h
#include <sys/resource.h>

BusyBox Settings->Network device->[]route
#####################################
重新编译内核

发现apache不能访问新的内核
stat vmlinux-2.6.20.bin
对比原来能跑的内核和新的内核
chcon -R -t httpd_sys_content_t vmlinux-2.6.20.bin
chcon -R -t httpd_sys_content_t vmlinux403.bin




http://stackoverflow.com/questions/17242403/linux-running-self-compiled-kernel-in-qemu-vfs-unable-to-mount-root-fs-on-unk

  • 大小: 18.5 KB
  • 大小: 73.1 KB
  • 大小: 32.4 KB
分享到:
评论

相关推荐

    编译buildroot-2020.02.9.tar.bz2时自动下载所必需的源码

    编译buildroot-2020.02.9.tar.bz2过程中自动联网下载到dl目录下的源码,使用这里的源码放到dl目录下可以大大减少编译时间。 book@book-VirtualBox:~/buildroot-2020.02.9$ tree dl/ dl/ ├── acl │ └── acl-...

    buildroot-2018.02.8.tar.gz

    Buildroot 是一个开源项目,它为嵌入式系统提供了一种构建自定义 Linux 发行版的工具。这个工具主要用于生成最小化的 Linux 环境,适用于各种硬件平台,如路由器、智能家居设备、自动驾驶系统等。在 Buildroot 中,...

    构建buildroot-2019.02.6.tar.bz2所需要的源码

    解压最外层目录,只需要把里边的两个压缩包:cmake-3.8.2.tar.gz 和 zlib-1.2.11.tar.xz 拷贝到buildroot-2019.02.6/dl 然后sudo make 即可

    buildroot-2020.02.11.tar.bz2

    buildroot 2020.02.11 LTS

    gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu

    gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu

    buildroot-2016.05.tar.bz2

    buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到...

    arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz

    嵌入式linux 交叉编译器

    buildroot配置及Qt5交叉编译.docx

    2. **解压**:使用`sudo tar -xvf buildroot.tar.gz`命令解压。 3. **创建编译脚本**:在Buildroot顶层目录下创建`cmd.sh`,内容应包括设置环境变量,如GCC路径。 4. **复制配置文件**:将`configs`目录下的`ls2k_...

    buildroot编译info.log warn.log

    Buildroot是一个轻量级的构建系统,它的目标是为嵌入式设备生成最小化的、自包含的Linux系统。通过提供一个简单的配置界面,用户可以选取需要编译的组件,如内核、文件系统、工具链等,然后Buildroot会自动下载源...

    dl88荣品RK3588的Buildroot的下载20230103-0835.tgz

    总的来说,"dl88荣品RK3588的Buildroot的下载20230103-0835.tgz" 提供了一个专为RK3588处理器优化的Buildroot构建环境,使得开发者能够更高效地创建和定制嵌入式Linux系统,尤其是在网络环境不佳的情况下,通过一个...

    cv1826的buildroot的dl20230328-2345.tgz

    cv1826的buildroot的dl20230328_2345.tgz 由于需要从外网下载,所以放到这里,以便节省大家的时间。 因为有些时候会出错,或者等待很久的时间呀! CV1823_CV1825_CV1826_PINOUT_V0.2_CN.xlsx

    linux-HEAD.tar.gz

    http://sources.buildroot.net/linux-HEAD.tar.gz 编译时缺少不能下载的包 下载后将解压出来,然后将linux-HEAD.tar.gz放到buildroot/dl目录 RV1126_RV1109

    20241104荣品RK3566buildroot的包文件dl8.tgz rk-linux5.10-20240828.tar

    荣品RD-RK3588-AHD开发板buildroot系统的包文件。rk-linux5.10-20240828.tar 我今天 需要下载的包才2GB。我 12:30开始编译的,编译完成 16点。花了3.5小时。 【原厂的包文件齐全的话,大概1.5小时搞定。】 基本上...

    buildroot-2019.02.7.tar.bz2

    Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation. https://buildroot.org/

    The Buildroot User Manual.pdf.tar.gz

    瑞芯微 linux开发,buildroot使用手册,下载

    buildroot-2019.02.6.tar.bz2

    buildroot-2019.02.6

    buildroot-rockchip-2018.02-rc3.zip

    使用 Buildroot 构建 RK3399 系统时,首先需要根据目标平台选择或创建合适的配置文件,然后运行 `make` 命令进行编译。编译过程中,Buildroot 会下载源代码、配置选项、编译、打包,并生成一个完整的文件系统映像,...

    buildroot 2018.05.1

    **Buildroot 2018.05.1:构建嵌入式Linux系统的基石** **一、Buildroot简介** Buildroot是一个开源项目,用于构建嵌入式Linux系统的工具链、内核、根文件系统等核心组件。它简化了在各种硬件平台上创建定制化Linux...

    buildroot-2019.05.1.tar.gz

    Buildroot作为一个轻量级的工具,为开发者提供了一种方便的方式来构建嵌入式Linux系统的根文件系统。本文将详细探讨Buildroot 2019.05.1版本及其工作原理,同时也会涉及到mdb文件的相关知识。 首先,让我们深入了解...

Global site tag (gtag.js) - Google Analytics