jslinuxネットワーク機能付きカーネル

6813 ワード

詳細
jslinux-networkを再コンパイルしたい
のカーネルは、実はfabrice bellardのカーネルよりe 1000のNICが多いのです
カーネルとユーザ空間を通信するnetlink socketを使用可能にする
テストは
ip link利用可能
キーは
make ARCH=i386  drivers/net/e1000/
最後の1つ/少なくてはいけません
テスト環境32ビットのcentos 7:

[root@centos32 linux-2.6.20]# uname -a
Linux centos32 3.10.0-327.18.2.el7.i686 #1 SMP Fri May 13 02:29:38 UTC 2016 i686 i686 i386 GNU/Linux
[root@centos32 linux-2.6.20]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (AltArch) 
[root@centos32 linux-2.6.20]# make -v
GNU Make 3.82
Built for i386-redhat-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@centos32 linux-2.6.20]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@centos32 linux-2.6.20]

buildroot-2016.08.1.tar.gz
普通のfabriceのカーネルなら
2.6.20 + buildroot
/# ip link
Cannot open netlink socket: Invalid argument
bzImage4.0.3 +buildroot
3つのデバイス、lo、eth 0、sit0@NONE
このカーネルは大きいので、後でコンパイル方法を入れます.
カーネルの問題と判断してnetlink socketエラーを起こす
探しました.configカーネルオプション、network driver関連はありません
実はネットカードが多すぎて関係がありません.configの中
pwd
/opt/jslinux/kernel/linux-2.6.20
make ARCH=i386  drivers/net/e1000/

NICディレクトリにbuilt-inを生成する.o
再コンパイルカーネル
time make ARCH=i386 -j16

参考『LINUX+2.6カーネル標準チュートリアル』
カーネルを生成するには
1.カーネルのコンパイルはarch/i 386/kernel/vmLinuxによる.ldsはすべてのbuildinをカーネルにコンパイルし、圧縮されていないsrc/vmLinuxを生成し、オフセットアドレス0 xc 00000000に接続する(ここではe 1000のNICもコンパイル).objcopy生成/arch/i 386/boot/compressd/vmlinux.bin gzipはvmlinuxを生成する.bin.gz)ldは接続スクリプトvmlinuxに従う.scrはpiggyを生成する.o 3.misc.o解凍cコードhead.o圧縮設定パラメータとスタックとpiggyをアセンブリする.o ldはarch/i 386/boot/compressed/vmLinux 4を生成する.objcopyはarch/i 386/boot/vmLinuxを生成する.bin 5.bootsect(512バイト)、setup(512バイト)、vmLinuxをbuildでbin bzImageの生成
bzImageがあればqemuでvmを起動できます

qemu-system-i386 -kernel  /opt/jslinux/kernel/linux-2.6.20/arch/i386/boot/bzImage -drive file=hda.img.lspci,if=ide,cache=none -append "console=ttyS0 root=/dev/hda rw rdinit=/sbin/init notsc=1"  -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,ifname=tap1,script=./if-up,downscript=./if-down -nographic

ip linkは間違っていません
qemuはまだ外部ネットワークにアクセスできませんが、この額カーネルはjslinux-networkに使用できます.
具体的な手順は以下の通りです.
★★★★
カーネルのコンパイル:
linux-2.6.20.tar.gz
ls
linux-2.6.20 tmp/linuxstart-20120111

cp tmp/linuxstart-20120111/config_linux-2.6.20 linux-2.6.20/.config
vim linux-2.6.20/.config
CONFIG_TUN=y

tunのサポートの追加
cd linux-2.6.20

patch -p1 < ../tmp/linuxstart-20120111/patch_linux-2.6.20   
patching file drivers/char/Kconfig
patching file drivers/char/Makefile
patching file drivers/char/jsclipboard.c
patching file drivers/serial/8250.c
patching file drivers/ide/ide-probe.c

patch -p1 < /var/www/jslinux_reversed/contrib/patches/2.6.20_common_fixes.patch
patching file arch/i386/kernel/Makefile
patching file kernel/mutex.c
patching file scripts/mod/sumversion.c
[root@centos32 linux-2.6.20]#

コード
https://github.com/killinux/jslinux_reversed
https://github.com/killinux/jslinux-network
本機に適応するための
gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
vim Makefile
検索/config%config

config %config: scripts_basic outputmakefile FORCE
 
%config: scripts_basic outputmakefile FORCE

検索//%/

/ %/: prepare scripts FORCE
 
%/: prepare scripts FORCE

CONFIGの確認TUN=y
ここが一番
.configのCONFIG_TUNは追加せずに元のCONFIGを削除します.TUNis not setがCONFIGになるTUN=y
この文はつけなくてもいいです.
make ARCH=i386  drivers/net/e1000/

この駆動はubuntuのカーネルが必要とする駆動であるべきだ.
deobfuscatedには入れなくてもいいです
vim .config
CONFIGの確認TUN=yはまだいるか
ある場合は実行
time make ARCH=i386 -j16

jslinux起動時に

tun: Universal TUN/TAP device driver, 1.6                                       
tun: (C) 1999-2004 Max Krasnyansky  

成功した
linux-2.6.20/arch/i 386/boot/bzImageの生成
cd ../tmp/linuxstart-20120111/
jslinuxで使用可能な
vim Makefile
先ほどのkernelパスを指定します
修正KERNEL_PATH=../../linux-2.6.20
make kernelはvmlinux 26を生成する.bin
cp vmlinux2.6.bin/var/www/jslinux-network/
vim jslinux-network/jslinux.js

    if (!kernel_name)
        //kernel_name = "vmlinux-2.6.20.bin";
        kernel_name = "vmlinux26.bin";

Websocketのサービス側プロセスを起動しtapのチャネルを確立する
jslinux-network/websocketstuntap/launch.sh
jslinux-networkに入ります
cat /dev/clipboard|sh

tap 0の作成
Webページのconnect or reconnect websocketsの起動
ping 10.0.2.2
以上がカーネルコンパイル置換に成功しました
ハードディスク(HDD)ファイルを置き換えます.
############################################################################
lo,eth 0,sit 0のカーネルを持ちたい場合は、
つかむ
http://dl2.iteye.com/upload/attachment/0121/2645/d7cb6c0e-5039-30d7-a08a-49019f17d18c.jpeg
保存するconfigコンパイルlinux-4.0.3のカーネルをbzImageにすればよい
カーネルのダウンロードアドレス
https://www.kernel.org/pub/linux/kernel/v2.6/
テスト

qemu-system-i386 -kernel bzImage -drive file=root.bin,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1"  -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,ifname=tap1,script=./if-up,downscript=./if-down -nographic

vmテストに進む

ifconfig eth0 192.168.122.3 netmask 255.255.255.0 
route add default gw 192.168.122.1
echo "nameserver 114.114.114.114" >/etc/resolv.conf
ping www.baidu.com


[root@centos32 kvm]# cat if-up 
#!/bin/sh
ip link set tap1 up   
#brctl addif br0 tap1 
brctl addif virbr0 tap1
  • config.4.0.3.jpeg (95.8 KB)
  • ダウンロード回数:1