使用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文件
由几个关键点:

[b]1.jslinux.js里面有一行[/b]

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>

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

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

[b]4.注意观察 /etc/fstab /etc/mtab /etc/inittab[/b]

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

[code]
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 中的包都考过去节省时间
[/code]
[color=red][b]注意:得到的rootfs.ext2不能超过4M,否则不能作为ram挂载[/b][/color]

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

[code]
mkdir tmp
mount -o loop rootfs.ext2 tmp
[/code]
需要改几个地方
sbin/init
改成:
[code]
---------------------------------
#!/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"
-----------------------------
[/code]
注意,/dev下的设备文件是由mdev -s生成的
/proc /sys需要挂载,
生成的/dev下面可能会缺需要的交互设备/dev/jsclipboard 和/dev/net/tun等去 jslinux上ls -l一下
没有的可以这样建立

[url]https://github.com/Pivosgroup/buildroot-linux-kernel/blob/master/Documentation/networking/tuntap.txt[/url]
[b]
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
[/b]

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

#如果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
[code]Ctrl-a x[/code]


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

使用qemu跑这个img的话:qemu不需要修改/sbin/init,是jslinux需要
[code]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[/code]
注意root=/dev/sda 为sda
因为rootfs.ext2大于4M,如果buildroot不编译pppd,可以达到2.1M,这样可以直接用
[code]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[/code]

而使用root=/dev/hda 会报错误
[img]http://dl2.iteye.com/upload/attachment/0117/3081/a9e9f0b2-31ab-3f3a-9b92-20b4d98a0ac1.png[/img]

使用sda后
正确结果
[img]http://dl2.iteye.com/upload/attachment/0117/3083/4c2a0e76-24d7-338e-adc0-768d15160182.png[/img]

只加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


最终结果为
[img]http://dl2.iteye.com/upload/attachment/0117/3186/8e46cfd5-2fb3-38d6-a24d-0647765edf5b.png[/img]


###################附加,如果是ubuntu上#####
----------ubuntu-----------
make menuconfig
apt-get install make gcc g++ libncurses5-dev unzip -y
[code]
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
[/code]

附加没用的信息
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
【buildroot】buildroot使用笔记-02 | 对/dev的四种管理机制 本文描述buildroot对/dev目录的四种处理方式。 阅读详情

相关推荐

从0开始使用QEMU模拟ARM开发环境之定制Ubuntu rootfs(根文件系统)

QEMU定制Ubuntu rootfs(根文件系统)

墨1024 5197

制作根文件系统

可以根据自己需要制定rootfs,可以选择ramdisk、initramfs、nfs等。根文件系统是Linux内核启动之后挂载的第一个文件系统.根文件系统支持从网络挂载和本地挂载两种方式.(1)如果是采用网络挂载就将路径设置为/dev/nfs,NFS是Linux下常用的网络文件系统,这种方式挂载一般是在系统开发阶段,方便修改调试代码,也就是将根文件系统放在PC机上,嵌入式开发板通过网络到PC机进行访问。

never_go_away的博客 1040

linux 内核启动Initramfs与initrd 及其挂载

Initramfs/initrd则是填充(仅仅是释放文件到rootfs根目录)/扩充(通过挂载其他文件系统类型到rootfs指定目录)rootfs的关键,以保证Linux系统的后续启动。 1.initrd 在早期的linux系统中,一般只有硬盘或者软盘被用来作为linux根文件系统的存储设备,因此也就很容易把这些设备的驱动程序集成到内核中。但是现在的嵌入式系统中可能将根文件系统保存到各种存储设备上,包括scsi、sata,u-disk等等。因此把这些设备的驱动代码全部编译到内核中显然就不是很方便。 为了

LETFLY'S LAB 1万+

嵌入式Linux--制作根文件系统--buildroot

文章目录参考前言制作根文件系统讲解buildroot构建根文件系统的原理讲解uClibc与glibc的差异使用buildroot制作自己需要的文件系统烧录自己制作的根文件系统 参考 前言 制作根文件系统 制作buildroot根文件系统(一):根文件系统和Qt5例程 制作buildroot根文件系统(二):使用tinyalsa播放音频 制作buildroot根文件系统(三):使用mplayer播放视频 制作根文件系统  在介绍制作文件系统之前,我们先来看一下Linux是如何存储数据的。一

似水流年 3065

别再让CPU干GPU的活了:CST Studio Suite GPU加速深度调优指南(从驱动版本到任务管理器监控)

本文深入探讨了CST Studio Suite的GPU加速深度调优方法,从NVIDIA驱动版本选择到系统级资源管理,再到实时监控与瓶颈诊断技术。通过科学的驱动优化、GPU资源管理策略和高级调优技巧,显著提升仿真效率,特别适合电磁仿真工程师和硬件加速需求的专业用户。

weixin_28740299的博客 166

玩转RecyclerView | 实现子视图叠加 | 3D画廊效果 | 高级动效 | Android 3D坐标系介绍

之前写的一篇文章展示了RecyclerView实现的画廊效果,适用于专辑/图片/列表浏览效果。本篇文章阐述如何基于RecyclerView实现如下图所示的3D画廊效果。以下效果的重点在于实现子视图的图层叠加,滑动过程中的3D旋转效果较为简单。(1)无3D旋转效果图片(1)带3D旋转效果图片。

qq_38237224的博客 8155

嵌入式Linux驱动笔记(二十三)------使用buidroot构建文件系统

如上所述,Buildroot基本上是一组Makefiles,可以使用正确的选项下载,配置和编译软件。它还包括各种软件包补丁-主要参与的交叉编译工具链的那些(gcc,binutils和 uClibc)。 每个软件包基本上有一个Makefile,它们以.mk扩展名命名。Makefile分为许多不同的部分。 该toolchain/目录包含Makefile文件和相关文件的有关交叉编译工具链的所有软件:bi...

风筝 2031

【上海大学计算机组成原理实验报告】五、机器语言程序实验

机器语言程序实验//理解计算机执行程序的实际过程//学习编制机器语言简单程序的方法//将R1中的数值左移n次送OUT,其中n是R2中的数值。(指令码从10开始)//完成R3=R0×R1,结果送OUT。(指令码从30开始)//建立“中文汇编指令”需要哪些条件?//上海大学计算机组成原理实验报告

HackerKevon的博客 2189

Buildroot根文件系统之mdev自动挂载U盘C程序检测

Buildroot根文件系统之mdev自动挂载U盘C程序检测

seekerzjy的博客 1236

MATLAB2022b安装

图文并茂,手把手教会你怎么安装MATLAB2022b

1万+

当我们谈论Unidbg时我们在谈什么

文章目录一、前言二、使用Unidbg的工作量是什么三、补环境补的是什么3.1 运行环境缺失3.2 上下文缺失四、Unidbg 不是所有情况下最优的解决方案五、Unidbg在大多数情况下是好的方案六、Unidbg和风控无关七、尾声 一、前言 这是一篇漫谈Unidbg的文章,我对Unidbg的使用和理解都还很浅,日后会更新或修改看法,欢迎大佬指点,也期待同侪讨论。 二、使用Unidbg的工作量是什么 我们常规使用Frida + IDA的动静态分析中,工作可能是这样的 找线索→Frida Hook验证→验证成功继

lilac的博客 5788

【Buildroot】学习记录(2)配置注释

Buildroot是linux平台上一个构建嵌入式linux系统的框架.整个Buildroot是由Makefile(*.mk)脚本和Kconfig(Config.in)配置文件构成的,因此可以像配置linux内核一样执行 make menuconfig 进行配置,编译出一个 完整的,可以直接烧录到机器上运行的Linux系统文件(包含bootloader,kernel,rootfs和rootfs中的各种库和应用程序)获取: 获取源代码解压: 解压源代码补丁: 针对缺陷修复和增加的功能应用补丁。

似水流年 1万+

基于YOLOv26的道路抛洒物检测系统原理实现

本文提出了一种基于YOLOv26的道路抛洒物智能检测系统,通过深度学习技术实现道路抛洒物的实时检测与分类。系统采用分层架构设计,包含视频采集、目标检测、分类评估和预警处理等模块,能够自动识别轮胎碎片、货物包装、金属零件等多种抛洒物,并根据危险程度分级预警。YOLOv26算法在检测精度和速度上的优势使其特别适合道路监控场景,结合背景建模和运动目标提取技术,有效提高了复杂道路环境下抛洒物的识别率。该系统可集成到现有智能交通监控平台,为道路安全管理提供实时决策支持。

一键难忘的博客 1254

linux开发板添加解压命令,图文详解x4418开发板搭建最简单的linux文件系统

原标题:图文详解x4418开发板搭建最简单的linux文件系统搭建最简单的Linux文件系统,方法有很多种,其中使用busybox来搭建是比较传统的,也是很旧的一种方法。这种方法现在看来已经很落后了,如果要移植多一点的第三方文件如busybox, tslib, qt, vim,交叉编译工具等,就需要自己手动一个一个移植进去,非常浪费时间。而buildroot可以说是很方便的解决了这个问题,只需要在...

weixin_39777163的博客 587

CDDT CST CDDT CSTTT

This is the second part of the SA8653 automotive CDDT configuration guide. It describes the matching rules and modification methods between CDDT and device‑tree DDTS. It explains CDT’s underlying logic and configuration in TZ, QNX and Android. It details C

qq_39257814的博客 1411

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

linux下chmod +x的意思?为什么要进行chmod +x

上周在工作中接触到chmod +x 这个命令,如下图: 首先对start.sh这个启动文件删除,然后使用rz命令上传了新的start.sh,然后发现还有进行下一步,chmod +x start.sh 这一步是什么意思呢?经过上网查询(说的比较复杂,引申太多)和咨询我们研发(还是研发说的通俗易懂) chmod +x的意思就是给执行权限 LINUX下不同的文件类型有不同的颜色,这里 蓝色表示目录; 绿色表示可执行文件,可执行的程序; 红色表示压缩文件或包文..

我真的睡不够 1558

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

qemu安装以及安装问题解决

首先下载qemu: git clonegit://git.sv.gnu.org/qemu.git或者自行下载需要版本http://wiki.qemu.org/Download 然后安装 cd qemu ./configure--enable-kvm --target-list="x86_64-softmmu"   //选择对应的系统版本和位数 make && makeinstall 安

weimingyu945的专栏 4万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

搭建基于qemu的linux开发环境

目录前言1 编译u-boot2 编译linux kernel3 使用busybox制作根文件系统4 在qemu上利用u-boot启动kernel参考文献 前言 1 编译u-boot 2 编译linux kernel make vexpress_defconfig ARCH=arm make modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make...

gzxb1995的博客 1864

Qemu下u-Boot + Kernel + rootfs完整启动移植

对于Ubuntu12.04系统,首先要安装如下的库文件,不然在后续的移植过程中会出错 1、zlib库 sudo apt-get install zlib1g-dev 2、glib库的安装 1)在Ubuntu下,通过如下命令来获取glib库,命令为:git clone https://git.gnome.org/browse/glib 2)下载完后,进入glib库所在的目录。cd ~/gl

Second的专栏 1万+

qemu安卓版免root_用qemu运行一个小小Linux系统

最近在学习Linux内核(希望能坚持),需要有一个沙盒环境来运行自己编译的内核,虚拟机当然是最理想的环境了。选用的环境/系统:虚拟机软件:qemu虚拟机环境:x86_64根文件系统:busybox先热身首先,我们先不指定根文件系统,来运行一下我们的内核:qemu-system-x86_64 -kernel vmlinuzvmlinuz是内核编译出来的bzImage, x86_64的在内核源码的a...

weixin_30346649的博客 1955

u-Boot环境变量的设置

看到这个标题,可能觉得这个并没有什么的,其实不然,编好了u-boot了,但是如何来使用确不是那么简单的,想当初我将uboot制作出来后以为全部都搞定了,屁颠屁颠的烧到板子上后可系统就是起不来,为什么了,折腾了很久以后才发现是u-boot的环境变量设置错误,在后来的工作中,我发现一些有一定经验的人在这方面也是模模糊糊的扯不清,所以这里要讨论一下。       u-boot的环境变量是使用

行者 6110

Linux文件系统——ramdisk根文件系统制作

ram disk介绍   ram disk顾名思义,内存磁盘。我们平常接触的一些存储介质,如:nor flash、nand flash、emmc、ufs、以及机械硬盘固态硬盘等,都是用来存储数据的,同理内存也是可以当成磁盘来存储数据的,唯一不同的就是ram是掉电不保存的,而前面提到的那些存储介质掉电都是保存数据的。   我们都知道,在linux中,上面介绍的flash这些存储介质,都是需要有对应的...

深海 1万+

bootargs常用属性项

bootargs可以在DTS中生成,chosen里有属性项bootargs,启动linux时,内核会使用chosen中定义的bootargs,如果没有定义bootargs,linux会使用内核默认的bootargs。 格式是 由很多个键值对用空格隔开依次排列, 每个参数中都是: 参数名=参数值 整个 Kernel command line会被内核启动时解析, 解析成一个一个的参数名=参数值的字符串...

Huskar_Liu的博客 7177

ramdisk配置、解压、创建rootfs、启动简单分析

关键词:ramdisk、rdint、.init.ramfs、__initramfs_start、__initramfs_size、rootfs、ramfs、populate_rootfs()、gzip、actions[]、free_initmem()、run_init_process()等等。 本着了解ramdisk,带着如下几个问题进行分析: 如何打开ramdisk功能? ram...

weixin_30551963的博客 1073

Ramdisk以及android中的ramdisk

uboot的bootargs环境变量中root=ram或者root=ram0

gx19862005的专栏 8760
上一篇: socat和netcat(nc)
下一篇: 120M硬盘的jslinux
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值