惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
S
SegmentFault 最新的问题
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Proofpoint News Feed
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
AI
AI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
U
Unit 42
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
H
Help Net Security
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 热门话题
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Heimdal Security Blog
博客园 - 聂微东
S
Securelist
大猫的无限游戏
大猫的无限游戏
Cloudbric
Cloudbric
Cisco Talos Blog
Cisco Talos Blog

博客园 - CalvinChu

vyos syslog配置 How to upgrade pip on Debian Wheezy 指数数据解密,懂的都懂 OpenWRT and VPN Passthrough - CalvinChu 如何将 find 命令与 exec 一起使用 CentOS 7 下搭建 OpenVPN - CalvinChu How to get the ip ranges of domain esxi 直通sata控制器 Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_P xRDP – Detected issues with Debian 11 – Oh No ! Something has gone wrong…. ImportError: libSM.so.6: cannot open shared object file: No such file or directory openwrt(lede)中,PPtP Client需要安装的软件包 OpenWrt中的Hotplug脚本 MAC OSX VPN自动添加静态路由 - CalvinChu fbprophet安装和使用 CentOS7安装iptables防火墙 CENTOS7下安装REDIS mysql忘记root密码解决办法 iptables命令(备忘)
qemu-mips环境搭建跳坑指南
CalvinChu · 2022-01-14 · via 博客园 - CalvinChu
  1. qemu安装

    安装有很多方式,对于ubuntu/debian用户,直接apt安装即可

    官网:https://www.qemu.org/download/

    sudo apt-get install zlib1g-dev
    sudo apt-get install libglib2.0-0
    sudo apt-get install libglib2.0-dev
    sudo apt-get install libtool
    sudo apt-get install libsdl1.2-dev
    sudo apt-get install libpixman-1-dev
    sudo apt-get install autoconf
    sudo apt-get install qemu 
    sudo apt-get install qemu-user-static
    sudo apt-get install qemu-system
    

    或者使用源码安装的方式
    https://www.qemu.org/download/
    https://github.com/qemu/qemu

  2. buildroot 交叉编译环境的配置

下载buildroot

   wget http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2
   tar -jxvf buildroot-snapshot.tar.bz2
   cd buildroot

配置buildroot

   sudo apt-get install libncurses-dev patch
   make clean
   make menuconfig

出现的界面当中,”Target Architecture”改为”MIPS”大端小端自行选择,另外在”Toolschain”中要将”Kernel Headers”的版本改为自己系统的版本

可以使用 uname -r 查询

我的内核版本是4.13.0-36-generic

很难受的一点是 在Kernel Headers选项中并没有4.13.x……

这时候要选择”Manually specified Linux version”,并在下方的”Custom kernel headers series”中手动指定为4.13.x

退出后执行下方命令

   sudo apt-get install texinfo
   sudo apt-get install bison
   sudo apt-get install flex
   sudo make

在编译过程中……会比较慢…..耐心等待 = =

其中要注意的一点是,我在编译的时候遇到了一个问题

其中一部分文件在下载时本应是linux-4.13.tar.xz但是Makefile好像有些问题,访问成了linux-.tar.xz

我对这个问题的处理方式是:

 1. 手动下载linux-4.13.tar.xz

 2. 手动保存为

    ```buildroot/output/build/linux-headers/.stmap_download```

    和

    ``buildroot/dl/linux/linux-.tar.xz``

3. 继续编译

编译结束后,使用mipsel-linux-gnu-gcc指令即可编译出mips架构下的elf文件

同时,mips程序执行所需要的依赖库也都保存到了/usr/mipsel-linux-gnu/lib

  1. qemu虚拟机的网络环境配置

    首先安装依赖

    sudo apt-get install bridge-utils uml-utilities

    我这里选择使用网桥的方法使宿主机与虚拟机互联,然后通过NAT的方式使虚拟机与外网链接

    注意一点,如果不进行NAT设置的话,虚拟机是不能访问外网的,这也是许多文章没有提到的问题(我在坑里呆了好久)

    sudo brctl addbr br0
    sudo ifconfig br0 192.168.122.1/24 up
    sudo tunctl -t tap0
    sudo ifconfig tap0 192.168.122.11/24 up
    sudo brctl addif br0 tap0
    

    下载qemu虚拟机的镜像

    https://people.debian.org/~aurel32/qemu/mips/
    

    我选择的内核和镜像是vmlinux-3.2.0-4-4kc-maltadebian_wheezy_mips_standard.qcow2

    默认用户名密码是:root/root

    然后在本机配置dhcp,dns服务

    sudo dnsmasq --strict-order --except-interface=lo --interface=br0 --listen-address=192.168.122.1 --bind-interfaces --dhcp-range=192.168.122.2,192.168.122.254 --conf-file="" --pid-file=/var/run/qemu-dhcp-virbr0.pid --dhcp-leasefile=/var/run/qemu-dhcp-virbr0.leases --dhcp-no-override

    现在使用

    sudo qemu-system-mips64 -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic

    命令启动虚拟机,就可以做到虚拟机与宿主机互通了

    接下来进行外网连接的配置

    开启端口转发

    sudo sysctl -w net.ipv4.ip_forward=1
    sudo sysctl -p /etc/sysctl.conf
    

    配置iptables

    sudo iptables -t nat -A POSTROUTING -s "192.168.122.0/255.255.255.0" ! -d "192.168.122.0/255.255.255.0" -j MASQUERADE
    sudo iptables -N vm-service
    sudo iptables -A vm-service -j ACCEPT
    sudo iptables -A FORWARD -s 192.168.122.0/24 -j   vm-service
    

    再使用上方的命令启动虚拟机,就可以与外网互通了

  2. qemu-mipsel运行动态编译的程序

    qemu-mipsel平时运行程序,遇到动态编译的程序时,就会提示依赖库缺少

    书上和网上给出的方法都是chroot,但使用这个命令时也有几个坑

    先将buildroot所编译出的lib库复制到程序文件夹下

    然后再执行chroot的命令

       cp $(which qemu-mipsel) .
       sudo chroot . ./qemu-mipsel hello
    

    已经将lib库复制到目录下,但是在执行时还是缺少依赖库

    这时候大概率就是qemu-mipsel缺少依赖库了…….一种解决方式是通过ldd指令查看qemu的依赖库,并复制,另一种方法是我更推荐的,直接使用静态编译的qemu-mipsel-static

       cp $(which qemu-mipsel-static) .
       sudo chroot . ./qemu-mipsel-static hello
    

至此…..我的qemu安装爬坑结束,哪里有问题,还望师傅们多多包涵(告诉我)