使用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
gcc 版本 4.8.5 centos 7.2.1511 (AltArch) 内核版本3.10.0-327.13.1 32位操作系统
buildroot版本buildroot-2016.02
make menuconfig
->Target options
-->Target Architecture 选i386
->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等网络需要的工具 (这个最重要)
make
编译出错可能需要
需要这个补丁(pthread.h找不到的问题)
https://gcc.gnu.org/bugzilla/attachment.cgi?id=28902&action=edit
yum install patch -y
生成rootfs.ext2
mkdir tmp
mount -o loop rootfs.ext2
需要改几个地方
sbin/init
改成:
注意,/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
mkdir /dev/net (if it doesn't exist already)
mknod /dev/net/tun c 10 200
mknode /dev/jsclipboard c 10 231
---------------------------------
#!/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"
-----------------------------
建立
/ppp_up
#---------------
#!/bin/sh
pppd /dev/ttyS1 noauth defaultroute usepeerdns
#-------------
运行的时候可能会缺某些/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
附加没用的信息
vim include/platform.h
#include <sys/resource.h>
BusyBox Settings->Network device->[]route
busybox的cpio的方式可以让qemu 的initrd方式运行
但是buildroot的不行,buildroot的直接放给 jslinux即可