欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

120M硬盘的jslinux

程序员文章站 2022-05-26 20:42:08
...
----------------------------------
浏览器上跑操作系统

目标,可定值内核(2.6.20,2.6.24,3.15,3.19): vmlinux26.bin
定制硬盘文件:hda.img,root.bin
可定制启动文件:linustart.bin
可定制网络(websocket,webrtc)

----------------------------------
创建硬盘的:
jslinux_reversed
https://github.com/killinux/jslinux_reversed
fabrice bellard原版的
jslinux-bellard
https://github.com/killinux/jslinux-bellard
copy from bellard.org
网络的:
jslinux-network
https://github.com/killinux/jslinux-network
copy from https://bitbucket.org/ivucica/jslinux-network/
jsmodem
https://github.com/killinux/jsmodem
看源码的:
jslinux-deobfuscated
https://github.com/killinux/jslinux-deobfuscated
另一种RISC-V指令集的的:
riscv-angel
https://github.com/killinux/riscv-angel
什么都带的
https://github.com/kmacrow/Vespen
###############################################
jslinux_reversed有一些问题:
因为squeeze的版本比较老,属于debian6,源要去归档里找http://archive.debian.org/debian
contrib/createimage.sh
改成
##################
debootstrap        --variant=minbase         --include=psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,netcat-openbsd,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace         --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6         --arch i386         squeeze squeeze         'http://archive.debian.org/debian'


用更小一点的低版本镜像,需要装ssh
debootstrap        --variant=minbase         --include=ssh,psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace         --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6         --arch i386         etch etch         'http://archive.debian.org/debian'


debootstrap        --variant=minbase         --include=ssh,psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace         --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6         --arch i386         etch etch         'http://archive.debian.org/debian


参考http://www.debian.org/releases/
##################
可能会有网络原因,多试验几次,可以include去掉一些,ssh比较大,加了就到130M了
如果网络不好可以下载
http://pan.baidu.com/s/1c14HKre
squeeze.tar.gz
如果想用ssh,去掉一些其他的
#################
debootstrap        --variant=minbase         --include=iputils-ping,ssh,gdb,binutils,gcc,libc6-dev         --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6         --arch i386         squeeze squeeze         'http://archive.debian.org/debian'

###################
-------------------------------------------------------------------------------
解压后就可以按createimage.sh的进行了,

createimage.sh
https://github.com/killinux/jslinux_reversed/blob/master/contrib/createimage.sh
##################################
例子:
使用ubuntu14.04 32位
假设默认目录 /var/www
ls
linux-2.6.20 jslinux_reversed
cd linux-2.6.20
patch -p1 < ../linuxstart-20120111/patch_linux-2.6.20   
patch  -p1 < ../linuxstart-20120111/2.6.20_common_fixes.patch 
https://github.com/socketpair/jslinux_reversed/blob/master/contrib/patches/2.6.20_common_fixes.patch

修改Makefile
#################################
config %config: scripts_basic outputmakefile FORCE
Instead of:
%config: scripts_basic outputmakefile FORCE
The 1268 line of code: 
/ %/: prepare scripts FORCE
Instead of: 
%/: prepare scripts FORCE

################################
time make ARCH=i386 -j16

生成bzImage
编译内核完成
--------------------------------
cd jslinux_reversed/contrib
执行上面的debootstrap.....
生成squeeze,300多M,直接下载http://pan.baidu.com/s/1c14HKre。
./createimge.sh
#生成hda.img
#可以用qemu测一下img
如果在本机上测试需要刚才编译好的内核bzImage
还需要修改hda.img的sbin/init文件,把/dev/clipboard相关的去掉,这是jslinux和页面交互的
##########
#!/bin/sh
show_boot_time 2>/dev/null
echo "JSLinux started, initializing..."
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
export HOME=/root
export TERM=vt100
mount -n -t proc /proc /proc
mount -n -t sysfs /sys /sys
mount -n -t devpts devpts /dev/pts
mount -n -t tmpfs /tmp /tmp
mkdir -p "/tmp/root"
#/sbin/mdev -s
ip link set up dev lo
main() {
#    echo >/dev/clipboard
    while :; do
        echo "hello this is haoning s debian"
        setsid sh -c "exec bash 0<>/dev/ttyS0 1>&0 2>&0"
    done
}
#. /dev/clipboard
main "$@"

##################
用jslinux_reversed 的2.6.20.config 注意root后是hda
qemu-system-i386 -kernel /var/www/linux-2.6.20/arch/i386/boot/bzImage -hda  hda.img -append "console=ttyS0 root=/dev/hda rw init=/sbin/init notsc=1"  -nographic

默认的2.6.20的config是sda
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 

如果想使用ramdisk,使用
编译内核的时候.config需要加
###########
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
CONFIG_BLK_DEV_INITRD=y

###########
qemu-system-i386 -kernel /var/www/jslinux-network/tmp/linux-2.6.20/arch/i386/boot/bzImage -initrd  rootfs.ext2 -append "console=ttyS0 root=/dev/ram0 rw init=/sbin/init notsc=1 ramdisk_size=128000"  -nographic

make
#注意这里,Makefile比fabrice的多了splitted
make会在jslinux_reversed生成了bin目录,把120M的hda.img切割,并把linuxstart.bin vmlinux26.bin拷过去
简单修改index.html,下面加一句<div id="canvas1"></div>
我们的目录是jslinux_reversed 所以假设里,var prefix='/jslinux_reversed';

################################################
几个关键点
1.-append后面的参数是和内核对应的,如果对不上,则可能会内核的panic错误,
如果是ramdisk的方式,最好在4M一下,修改了2.6.20的
#####
CONFIG_BLK_DEV_RAM_SIZE=4096
#####
似乎也不好使
大于4M 需要加ramdisk_size=128000,但是7,8M的时候就不好使了,
2.hda.img不能超过120M
注意IMAGE_SIZE=120  不能超过120M,否则会报245760的错,内核限制只能这么大
###################
[root@centos32 linux-2.6.20]#grep -nR 245760 *
arch/ppc/platforms/gemini_serial.h:14:#define BASE_BAUD  (24576000 / 16)
drivers/atm/idt77252_tables.h:554:/*     245760.00 => 246 */ 0xf6, /* => 245504.00 */
drivers/net/wan/pc300.h:130:#define PC300_OSC_CLOCK     24576000
include/media/saa7115.h:38:#define SAA7115_FREQ_24_576_MHZ 24576000   /* 24.576 MHz crystal */
sound/pci/sonicvibes.c:189:#define SV_REFFREQUENCY              24576000

##############################
3.hda.img的/sbin/init
如果生成的/dev下面没有文件,需要加一句/sbin/mdev -s


120M硬盘的jslinux
            
    
    博客分类: jslinux debian 
有一个16M内存
120M硬盘
能跑gcc的浏览器就直接打开的操作系统
而且是可定制的操作系统。
下篇继续讲tap设备+websocket打通web上的jslinux到真实服务器
jslinux-network


http://dl2.iteye.com/upload/attachment/0121/1991/2720f5ca-f9cb-30a4-96a8-506ee60cb652.jpeg
保存成

.config文件给
https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.3.tar.xz

用,生成的bzImage 启动后会自动带eth0 可供测试用
  • 120M硬盘的jslinux
            
    
    博客分类: jslinux debian 
  • 大小: 36.3 KB
相关标签: debian