jslinux带网络功能的内核

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

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

最后一个/不能少
测试环境32位的centos7:
[code="java"]
# 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
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (AltArch)
# 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.
# 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.


[/code]


buildroot-2016.08.1.tar.gz

如果是普通的fabrice的内核

2.6.20 + buildroot
/ # ip link
[color=red]Cannot open netlink socket: Invalid argument[/color]

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内核标准教程》
生成内核的步骤
[b]
1.内核编译的时候会根据arch/i386/kernel/vmLinux.lds
把所有的buildin编译进内核,生成未压缩的src/vmLinux,连接偏移地址0xc0000000
[color=red](这里把e1000的网卡也编译进去了)[/color]
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
[/b]

有了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
[code="java"]
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
#
[/code]
代码在
[url]https://github.com/killinux/jslinux_reversed[/url]
[url]https://github.com/killinux/jslinux-network[/url]
为了适应本机的
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


[b][color=red]这里最重要[/color][/b]
make ARCH=i386  drivers/net/e1000/

vim .config
确认 CONFIG_TUN=y是否还在
如果在 ,就执行
time make ARCH=i386 -j16


生成 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的的内核,
把
[url]http://dl2.iteye.com/upload/attachment/0121/2645/d7cb6c0e-5039-30d7-a08a-49019f17d18c.jpeg[/url]
保存成.config编译linux-4.0.3的内核得到bzImage即可
内核的下载地址
[url]https://www.kernel.org/pub/linux/kernel/v2.6/[/url]
测试

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


其中
[code="java"]
# cat if-up
#!/bin/sh
ip link set tap1 up
#brctl addif br0 tap1
brctl addif virbr0 tap1
[/code]
netlink socket(linux内核模块与用户态之间通信实例) 本文通过一个编程实例来更深入地了解netlink。1.1        实现内容1.          功能Ø  实现一个并发的echo服务器程序,它(接收端)将接收到字符串进行转换处理后,返回给发送端;允许有多个发送端同时存在;Ø  字符串的处理包括:直接返回、全部转换为大写、全部转换为小写;处理方式应可以配置,配置方式包括全局(缺省)及每“发送-接收对(xmit/recv peer)”的。配置... 阅读详情

相关推荐

K型热电偶分度表读取方法

K型热电偶分度表读取方法

guaizaiguaizai的博客 5903

ip命令手册(一)(转)

ip命令手册(一)(转)  摘要  ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。这个手册将分章节介绍ip命令及其选项。本文的原文在http:/...

cuemes08808的博客 206

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

使用桥接网络的jslinux

本文代码在:https://github.com/killinux/jslinux-tap 测试demo在:http://www.hackernel.com/jslinux/ 11年很火的jslinux,把linux跑在浏览器上,10年过去了,还有人记得这个么? 这个代码参考了大神fabrice bellard的代码,版权归作者所有。 官网是: https://bellard.org/jslinux 这个已经变成wasm的版本,所以目前这个纯js版的作为学习Linux内核的教程还是很好的。 没混淆的jsli

走在左边 1670

ESP32-C5 Wi-Fi CSI感知技术原理与工程实践

Wi-Fi信道状态信息(CSI)是OFDM系统中反映多径信道特性的复数频域响应,源于导频子载波的信道估计过程,本质属于物理层原始观测数据。其高维度(如56子载波)、高时间分辨率(百赫兹级采样)及零硬件增益的特性,使其成为无感人体感知的理想信号源。相比UWB或毫米波雷达,CSI方案依托现有Wi-Fi基础设施,兼具成本优势与部署灵活性,广泛应用于呼吸监测、跌倒检测、手势识别等边缘智能场景。乐鑫ESP32-C5通过5.8GHz低噪接收、亚纳秒级多天线同步与固件级CSI增强,显著提升微动感知鲁棒性,结合AGC锁定、

weixin_42153793的博客 343

RK3568实现蓝牙音箱功能

A2DP旨在通过蓝牙连接传输高质量的立体声音频流。它使用的基本压缩算法是SBC(Sub-Band Coding)来减小音频数据的大小,同时保持高音质,SBC压缩虽然效率较低,但是是必须支持的基本备用方案。A2DP还支持其他高级编解码器,例如AAC、aptX和LDAC,这些编解码器比SBC提供更好的音质,但这些编解码器的支持取决于设备本身的支持情况。注意A2DP协议要与AVRCP协议区分开。A2DP是传输音频的,而AVRCP是用来控制音频的。这里我用到的是RK3568 Android11。

leikko的博客 1175

ip命令手册(一)

ip命令手册(一)摘要  ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。这个手册将分章节介绍ip命令及其选项。  本文的原文在[url]http://defiant.coinet.com/iproute2/ip-cref/[/url](2002-10-1518:40:46)-...

weixin_34062469的博客 266

游戏开发:逻辑与渲染分离技术解析

游戏开发中逻辑与渲染分离的架构设计 本文系统阐述了游戏开发中逻辑与渲染分离的设计原则与实践方法。文章首先定义了核心概念:逻辑层负责游戏规则与状态,渲染层处理视觉表现,二者通过数据模型层进行通信。通过历史回顾,揭示了从早期混合架构到现代分层设计的演变过程。 在技术实现层面,文章详细分析了分离架构的优势:性能优化、流畅度控制、测试便利性、扩展灵活性以及团队协作效率。提供了Unity和Unreal两大引擎的具体实现方案,包括代码示例、分层模型和最佳实践。特别探讨了网络同步、客户端预测、插值处理等关键技术难点。 文

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1060

socket 服务器端bind返回错误: Invalid argument

问题现象:bind返回 Invalid argument。 { unlink("server_socket"); serverSockfd = socket(AF_INET, SOCK_STREAM, 0); serverAddr->sin_family = AF_INET; serverAddr->sin_addr.s_addr = inet_addr...

Jony_T的博客 6183

逆向工具:一文讲述 Ghidra 的详细使用

Ghidra是由NSA开源的一款功能强大的逆向工程框架,支持多平台、多架构和多种文件格式分析。本文详细介绍了Ghidra的核心优势、安装配置方法、主界面功能模块,并通过一个CrackMe示例演示了完整的逆向分析流程。文章还讲解了高级功能如交叉引用、控制流图分析、数据类型重建和脚本自动化等,最后提供了常见文件格式的分析技巧。作为IDA Pro的免费替代方案,Ghidra适合个人学习、教学和中小项目使用。(149字)

数据知道的博客 4343

052、联发科Imagiq HyperEngine架构适配:天玑9000/9200的ISP多核并行调度与Tuning Toolkit调优案例

摘要: 项目组在适配联发科天玑9200的Imagiq 890 ISP架构时,遇到多摄预览功耗过高、帧率不稳等问题。通过分析多核调度机制,调整辅核QoS通道、优化AI-ISP协同模式(采用FREERUN+运动补偿),并利用Tuning Toolkit的Pipeline Viewer动态分配负载,最终降低功耗30mA、提升画质。关键经验包括:避免多核带宽冲突、合理配置动态时钟策略,以及统一校准参数版本管理。天玑9000/9200的HyperEngine架构需优先理解多核协同逻辑,再针对性调优,否则易引发场景兼容

zzfmlxs的博客 36

Android:cannot open transport registration socketpair:Invalid argument

之前Android运行模拟器一直是正常的,忙了一阵子,今天打算继续开发,发现出现这样的问题:我的模拟器不见了。。。。 使用天天模拟器,打开cmd,输入: 之前都是可以启动的,现在报错了。好吧,查看一下5037端口: 查看对应的进程: 杀死进程重新启动一下adb服务(/f:代表强行终止): 重启后还是不行,真是心累,赶一下作业还临时出一下岔子,可怕的Android。...

foreverzwl 1825

视觉SLAM十四讲slambook2示例代码所有依赖库的编译安装教程(VTK、OpenCV3、ceres、Sophus、g2o、Eigen、Pangolin、googletest等)

这是2021年的最后一篇博客~ 新年快乐! 0 准备工作   首先需要先安装cmake编译器: sudo apt-get install cmake   以及,将十四讲的示例代码克隆下来(十四讲的源码地址点击这里): git clone --recursive https://github.com/gaoxiang12/slambook2.git   由于里面的3rdparty文件夹内所有内容都来自于其他github仓库,所以需要加上--recursive参数,不然克隆下来的内容不完整。   如果你.

zeeq的博客 7839

jslinux重新编译内核3.19

一个日本的编3.8.5的: [url]http://d.hatena.ne.jp/cupnes/comment/20130403/1364974831[/url] 使用的系统版本是 Red Hat Enterprise Linux Server release 6.5 (Santiago) gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) 测试如下...

走在左边 321

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

逆天了,浏览器里面竟然也能运行Linux(JSLinux)

今天在学习NodeJS,在Node.JS实战书上提到了一个运行在JavaScript环境中的PC模拟器。读者你没有听错,是用JavaScript模拟的一个Linux服务器,而且上面还可以执行命令。支持从本地拷贝资料到服务器上,同时也支持从服务器上拷贝资料到本地,太神奇了!!!!

超越梦想,一起飞!!! 8339

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux网络编译选项,Linux 3.4.39内核编译配置选项介绍

Linux 3.4.39内核编译配置选项介绍Linux 3.4.39内核编译配置选项介绍工程项目使用了全志H3平台,make menuconfig配置内核为Linux 3.4.39版本:在网上参考了一些配置选项,但是每个版本都有一些差异,在总结网友提供的资料的基础上面,对3.4x版本进行归纳总结如下。—————————————————————————————————————————————————...

weixin_29050829的博客 751

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在qemu中用tun/tap设备与宿主机通讯

在qemu中用tun/tap设备与宿主机通讯 宿主机软件的安装配置。 准备: 安装必要的工具 $sudo apt-get install bridge-utils uml-utilities 这样就可以使用brctl, tunctl 命令了。 1. 创建一个网桥br0,网桥中包括eth0, tap0     由于没有dhcp 服务器,这里采用了静态分配ip    br0  网

hjjdebug的专栏 7908

MPLS 次末跳弹出配置_手工编译linux桌面内核(三)——网络的配置

前言:关于网络设置,在linux内核配置中也算是一块重要的内容了。不过万幸的是,内核的网络配置基本上与电脑硬件配置无关,只要你是一个linux桌面系统用户,那么我相信你的对网络设置的要求和我是一样的。所以关于内核网络配置,大家尽管以我分享的配置为模板,直接照抄下来。这部分很简单本文的定位是:为普通的linux桌面系统用户,提供一个能够满足日常使用(上网、办公、游戏)的linux内核网络配置模板,在...

weixin_40006977的博客 223

nginx代理wss和https

nginx启用ssl yum install openssl openssl-devel -y ./configure --prefix=/usr/local/nginx --with-http_ssl_module img]http://dl2.iteye.com/upload/attachment/0128/9904/e0b62951-a384-3178-a74c-2f...

走在左边 1996

qemu以64位和32位的方式跑busybox

两种方式x86_64 和32位的i386方式 -----------x86_64----------------------------------------- 参考[url]http://mgalgs.github.io/2015/05/16/how-to-build-a-custom-linux-kernel-for-qemu-2015-edition.html[/url] ...

走在左边 1188

用buildroot为jslinux建立最小rootfs

############################################################################## 制作镜像文件 buildroot-2016.08.1.tar.gz [code="java"] make O=haoning menuconfig Target options ---> Target Architectu...

走在左边 700
上一篇: Tunnels with iproute2
下一篇: 用buildroot为jslinux建立最小rootfs
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值