0%

原神

启动!

是什么?

一种可以在用户态运行的linux内核

有什么用?

进行内核隔离,替代qemu/bochs调试linux内核,在低性能设备上代替kvm进行虚拟化

怎么做?

编译linux内核

git下载源代码

1
git clone --depth 1 https://mirrors.tuna.tsinghua.edu.cn/git/linux.git

编译

1
2
3
4
cd linux
export ARCH=um
make defcongig
make

现在 你获得了一个vmlinux文件 这个vmlinux和正常内核的区别就是这个vmlinux可以在用户态运行

先别着急启动,先来准备rootfs

一下内容以debian为例

先安装debootstrap

1
sudo apt install  debootstrap

然后构建rootfs

1
2
3
4
5
6
7
8
sudo su
dd if=/dev/zero of=rootfs seek=2G#创建一个2GB的空rootfs文件
mkfs.ext4 rootfs#格式化为ext4格式
mount rootfs /mnt
cd /mnt
debootstrap sid ./ https://mirrors.tuna.tsinghua.edu.cn/debian#创建debian rootfs
umount /mnt
exit
1
2
3
sudo chown `whomi` rootfs

screen ./vmlinux mem=1G root=/dev/udba udb0=rootfs con=null con0=null,fd:2 con1=fd:0,fd:1 #启动一个拥有1gb内存的用户态linux

一般来说 安卓设备/windows设备投屏用的是miracast协议,但是这玩意要求网卡支持p2pwifi 但是linux下这玩意的支持貌似很差

于是用python+ffmpeg+dlna搓了个延迟有点大的投屏方案

先装这个dlna库

1
pip3 install dlna

然后

1
2
3
4
5
6
7
8
9
10
mkdir screencast
mkdir screencast/cgi-bin
cat <<eof>screencast/cgi-bin/screen.flv
#!/bin/bash
echo "Content-Type:video/x-flv"
echo

ffmpeg -f pulse -i Speeker name here -f x11grab -i :0 -vcodec h264_nvenc pipe:.flv
eof
chmod +x screencast/cgi-bin/screen.flv

写完cgi后 要对这个脚本进行一点修改

将 Speeker name here 替换成在pactl list sinks 中找到的”监视器信源”

如果没有nvidia显卡 或者是要使用其他的硬件加速 把H264_nvenc 替换为其他的 不建议软解 延迟非常高 还卡

需要投屏时

1
2
3
4
5
cd screencast
python3 -m http.server --cgi 9999

dlna device (找到你的dlna设备,然后把location后面的url复制下来)
dlna play -d 上一步的url http://你的lan ip(不是localhost):9999/cgi-bin/screen.flv

稍等片刻 视频就会出现在电视上了

欢迎使用WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!