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

jslinux带网络功能的内核

阅读更多
想重新编译jslinux-network
的内核,其实就是比fabrice bellard的内核多了个e1000的网卡
使内核与用户空间通信的netlink socket可用
测试即是
ip link可用

关键点是make ARCH=i386  drivers/net/e1000/

最后一个/不能少
测试环境32位的centos7:
[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 <http://gnu.org/licenses/gpl.html>
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,eth0,sit0@NONE
这个内核比较大,后面放编译方法



判断是内核的问题导致netlink socket错误
找遍了.config内核选项,network driver相关的都没有
其实网卡因为太多相关不在.config里面
pwd
/opt/jslinux/kernel/linux-2.6.20

make ARCH=i386  drivers/net/e1000/

在网卡目录生成built-in.o
再编译内核
time make ARCH=i386 -j16

参考《LINUX+2.6内核标准教程》
生成内核的步骤

1.内核编译的时候会根据arch/i386/kernel/vmLinux.lds
把所有的buildin编译进内核,生成未压缩的src/vmLinux,连接偏移地址0xc0000000
(这里把e1000的网卡也编译进去了)
2.objcopy生成 /arch/i386/boot/compressd/vmlinux.bin
gzip生成vmlinux.bin.gz)
ld 根据连接脚本vmlinux.scr生成piggy.o
3.misc.o解压缩的c代码
head.o汇编为解压缩设置参数和堆栈
和piggy.o
ld生成arch/i386/boot/compressed/vmLinux
4.objcopy 生成 arch/i386/boot/vmLinux.bin
5.用build将bootsect(512字节),setup(512字节) ,vmLinux.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_TUN is 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 <maxk@qualcomm.com> 

则表示成功了

生成 linux-2.6.20/arch/i386/boot/bzImage

cd ../tmp/linuxstart-20120111/

生成jslinux可用的
vim Makefile
指定刚才的kernel路径
修改KERNEL_PATH=../../linux-2.6.20

make kernel 生成vmlinux26.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

建立tap0

启动web页面上的connect or reconnect websockets
ping 10.0.2.2

以上是内核编译替换成功了
下面替换硬盘文件

###################################另外###########
如果想要带lo,eth0,sit0的的内核,

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



分享到:
评论

相关推荐

    深入Linux设备驱动程序内核机制.pdf

    在Linux内核中,设备驱动程序是作为内核模块编写的,可以动态加载或卸载,以增强系统的灵活性。本文深入探讨了Linux设备驱动程序的内核机制,特别是字符设备驱动程序的实现。 首先,驱动程序的基本概念包括驱动程序...

    jslinux总结帖

    【标题】"jslinux总结帖"所涉及的知识点主要集中在JavaScript和Linux操作系统上,通过将JavaScript与Linux结合,实现了一种独特的技术体验。JavaScript是一种广泛应用于网页和网络应用的编程语言,而Linux则是开源的...

    linux网络编程指南

    《Linux网络编程指南》这本书是针对那些希望通过编程实现Linux系统中的网络通信的开发者们的一份宝贵资源。在深入探讨这个主题之前,让我们先理解一下网络编程的基本概念:它是一种允许不同计算机之间进行通信的技术...

    node.js 在linux 64位系统上的可执行程序 node-v21.0.0-linux-x64.tar.gz

    3. **Linux**: Linux 是一种自由且开源的操作系统内核,广泛应用于服务器和各种设备上。"linux-x64"表明这个版本是为64位的 Linux 系统设计的,它可以兼容大部分现代64位的 Linux 发行版,如 Ubuntu、CentOS、Debian...

    Linux CCTV

    开发者需要确保使用的摄像头型号与Linux内核兼容,并正确安装相应的驱动程序。 2. **视频捕捉库**:如`v4l2`(Video for Linux Two)接口,它是Linux系统下处理视频输入输出的主要API,允许应用程序访问摄像头和...

    deepin系统/linux高版本系统,腾达U12无线网卡驱动程序

    4. Linux网络接口配置,如`ifcfg-wlan0`文件的编辑。 5. Wi-Fi网络连接,可能需要使用到wpa_supplicant等工具。 6. 解决Linux与非标准硬件的兼容性问题。 这些知识对于Linux运维人员和开发者来说是必不可少的,特别...

    JS9331开发板使用手册教程.zip

    总之,JS9331开发板结合openWRT提供了丰富的功能和灵活性,适合初学者和经验丰富的开发者进行物联网项目。通过深入学习和实践,你可以充分利用这款开发板实现各种创新应用。记得,每个新项目都是一个学习和成长的...

    Node.js-systeminformation-用于获取各种系统信息的Node.JS模块

    2. **操作系统信息**:提供了操作系统类型(如Linux、macOS、Windows)、版本、内核版本、发行版等。这对于跨平台应用的适配和优化至关重要。 3. **网络信息**:可以获取网络接口列表、IP地址、MAC地址、带宽利用率...

    最精简的pdf.js资源包

    3. **资源优化**:考虑到移动端的性能和网络条件,可能需要对 PDF.js 进行裁剪和优化,减少不必要的功能和资源,提升加载速度。 4. **兼容性测试**:由于移动设备的浏览器版本和性能差异,需要进行广泛的兼容性测试...

    Linux下的图书管理系统

    Linux是一个开源的操作系统,其核心是Linux内核。它提供了命令行界面(CLI)和图形用户界面(GUI)。图书管理系统在Linux环境下运行,可能依赖于特定的Linux发行版如Ubuntu、Fedora或Debian。 2. **文件系统与目录...

    Linux下简单宿舍管理系统

    Linux是一种自由和开放源代码的类UNIX操作系统,其内核由林纳斯·托瓦兹创建。Linux操作系统不仅在服务器领域广泛使用,也在个人电脑、移动设备和嵌入式系统中占据一席之地。它的优势在于稳定性、安全性和可定制性,...

    NodeJs4.4_Linux版

    Node.js 在 Linux 上运行时,可以充分利用其稳定性和高性能的特点,为开发者提供了一种构建高效网络应用的途径。 Node.js 4.4.4 版本包含了多项改进和修复,确保了在 Linux 平台上运行的可靠性和稳定性。这个版本...

    linux

    在IT领域,Linux是一个广泛使用的开源操作系统内核,由林纳斯·托瓦兹在1991年首次发布。这个标题暗示我们将探讨与Linux系统相关的知识,包括但不限于系统管理、命令行操作、软件安装、网络配置以及系统安全等方面。...

    Red_Hat_Enterprise_Linux-8-8.4_Release_Notes-zh-CN.pdf

    根据上述内容,可以看出RHEL 8.4在安全性、网络功能、内核、编程语言与数据库支持、开发工具以及身份管理方面都有所提升和优化。企业用户可依据这些信息,更好地了解和利用RHEL 8.4的新特性,确保其软件环境的先进性...

    基于Linux的智慧校园论坛的研究与开发.pdf

    1. **建立开发环境**:选用Rekhvi Linux作为论坛的基础开发环境,根据功能需求选择安装方式,通过网络下载并安装arm-linux-gcc等编译器。 2. **配置开发主机**:设置MINICOM为主机,配置参数如波特率、数据位、控制...

    EXT2.0,EXT4.0,JS

    EXT2.0、EXT4.0 和 JS 是计算机科学领域中的三个重要概念,它们分别代表了Linux文件系统、JavaScript编程语言以及JavaScript库EXT JS的相关版本。 EXT2.0是Linux操作系统下的一种文件系统,它是EXT(第二扩展文件...

    CEF 开发Js交互

    例如,动态库可能包括CEF的主库文件,如`libcef.dll`(Windows)或`libcef.so`(Linux),以及必要的运行时支持库。测试demo则提供了实际的例子,展示了如何初始化CEF、加载网页以及实现JS-C++的交互。 在CEF开发...

    休闲生活网络版

    首先,我们要明确的是,Android是一种基于Linux内核的开源移动操作系统,由Google主导开发并广泛应用于智能手机和平板电脑。在"休闲生活网络版"这款应用中,开发者很可能利用了Android SDK(软件开发工具包)和Java...

    node-v5.7.0-linux-x64.tar

    标题中的"node-v5.7.0-linux-x64.tar"是一个特定版本的Node.js运行时环境的Linux发行版,适用于64位架构系统。这个文件是一个归档文件,使用了tar格式,常用于在Linux和Unix环境中打包多个文件和目录。在Linux世界里...

Global site tag (gtag.js) - Google Analytics