飞羽小随笔-个人技术文章 - 飞羽
type: channel
link: https://blog.8086k.cn/author/1/
description: 飞羽
items: fastdds在windows下的编译和使用
items: Cloudflare worker更新华为DNS解析服务【支持群晖】
items: 通过Wireguard和RouterOS将服务器的ip分配给本地
items: DNSPOD的ddns ipv6脚本
items: 使用LXC使用以及openwrt模板镜像制作
items: Padavan校园网ipv6穿透教程
items: 猫盘群晖内网穿透npc打包全过程
items: harbor制作私有docker仓库
items: Proxmox VE(PVE)开启IOMMO并开启网卡(82576)SRIOV功能【时隔半年，我回来了】
items: 树莓派镜像制作

fastdds在windows下的编译和使用
type: item
date: 2025-07-19T01:43:00+08:00
description: 很久没更新了，由于本人工作原因以及个人原因（懒），现更新一个中间件编译和使用方法，以便以后进行翻阅。fastdds源码编译一、fastdds介绍[scode type="blue"]fastDDS 是由OMG定义的数据分发服务（DDS）规范的 C++实现。fastdds库提供了应用程序编程接口（API）和通信协议，部署了以数据为中心的发布-订阅（DCPS）模型，旨在实现实时系统之间高效且可靠的信息分布。DDS 采用的通信模型是一种多对多的单向数据交换，其中生成数据的应用程序将数据发布到属于消费数据应用程序的订阅者的本地缓存中。 信息流由负责数据交换的实体之间建立的服务质量 (QoS) 策略进行调节。<来自官网翻译>以下为DDS 数据流图，具体详细讲解请参考官网。[/scode]二、FASTDDS编译在windows中，你需要安装好visual studio，作者本人使用的visual studio版本为2019企业版，当前FASTDDS版本为3.3.0第一步，克隆代码git clone https://github.com/eProsima/Fast-DDS.git cd Fast-DDS git submodule update --init #拉取子模块android,asio,fascdr,tinyxml2 git submodule add https://github.com/foonathan/memory.git thirdparty/foonathan-memory #需要添加一个子模块第二步，编译依赖库找到vs2019控制台(x64 Native Tools Command Prompt for VS 2019)，打开，以下编译过程需要在vs2019控制台中操作，如下图2.1 编译 foonathan-memorycd thirdparty/foonathan-memory #进入foonathan-memory目录 mkdir build cd build #构建build目录 cmake ../ -DFOONATHAN_MEMORY_BUILD_EXAMPLES=OFF -DFOONATHAN_MEMORY_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=F:\fastdds\cmake\Fast-DDS\thirdparty\install #指定安装目录和配置foonathan-memory相关功能 cmake --build . --target install --config Release #在vs2019下执行完毕后foonathan-memory安装在F:fastddscmakeFast-DDSthirdpartyinstall目录。2.2 编译 fastcdr编译fastcdr与编译foonathan-memory类似，这里就不多赘述了。cd ../.. cd fastcdr mkdir build cd build cmake ../ -DCMAKE_INSTALL_PREFIX=F:\fastdds\cmake\Fast-DDS\thirdparty\install cmake --build . --target install --config Release2.3 编译 tinyxml2编译tinyxml2与编译foonathan-memory类似，同样不多赘述了。cd ../.. cd tinyxml2 mkdir build cd build cmake ../ -DCMAKE_INSTALL_PREFIX=F:\fastdds\cmake\Fast-DDS\thirdparty\install cmake --build . --target install --config Release2.3 编译 Fast-DDS编译Fast-DDS需要指定上述第三方库的安装位置和asio，然后进行编译。cd ../../../../ cd Fast-DDS mkdir build cd build cmake ../ -DCMAKE_INSTALL_PREFIX=F:\fastdds\cmake\Fast-DDS\install -DCMAKE_PREFIX_PATH="F:\fastdds\cmake\Fast-DDS\thirdparty\asio\asio;F:\fastdds\cmake\Fast-DDS\thirdparty\install" -DNO_TLS=ON -DCOMPILE_EXAMPLES=ON cmake --build . --target install --config Release如下图为编译后第三方库目录结构：如…

Cloudflare worker更新华为DNS解析服务【支持群晖】
type: item
date: 2022-10-20T22:19:00+08:00
description: 鉴于Routeros的DDNS解析脚本不能提取返回Header，而华为DNS可以任意设置TTL，而华为目前没有完整API，因此借助了Cloudflare Worker，封装了一个API。视频链接：☺教程和文章更配哦~☺1、起因1、想要让DDNS解析快点，需要减小DNS系统的TTL2、常年使用DNSPOD，但是专业版DNSPOD更改TTL只能更改60，企业版才能改为13、想要不受服务器的限制2、技术分享首先需要你拥有一个Cloudflare的账号，没有可以注册一个创建worker2.1 点击创建服务2.2 增加一个服务名称，并创建服务2.3 快速编辑，复制代码，保存代码我会放到文末，需要的可以自取！！！创建完毕，点击发送，可以看到执行内容下面介绍一下如何使用通过GET提交方式，如下图所示，需要用到账户名、密码、zoneid、recordsetid、要更新IP地址、TTL信息相关信息获取教程在下面5. 附加内容华为云账户名获取1.1 在右上角，找到基本信息，点进去2.1 账号名就是华为云账户zoneid和recordsetid获取2.1 首先，找到你的域名，创建一个，如图所示2.2 点击F12，出现控制台，调整为Network栏2.3 修改值为某个IP，点击确定，搜索recordsets2.4 找到如下图的链接/** * Example someHost is set up to take in a JSON request * Replace url with the host you wish to send requests to * @param {string} url the URL to send the request to * @param {BodyInit} body the JSON data to send in the request */ //iam.ap-southeast-3.myhuaweicloud.com const someHost = 'https://iam.ap-southeast-3.myhuaweicloud.com'; //const someHost = 'https://iam.myhuaweicloud.com'; const url = someHost + '/v3/auth/tokens'; /** * gatherResponse awaits and returns a response body as a string. * Use await gatherResponse(..) in an async function to get the response body * @param {Response} response */ async function gatherResponse(response) { const { headers } = response; return headers.get('x-subject-token'); } async function handleRequest(request) { const { searchParams } = new URL(request.url); let name = searchParams.get('name'); let password = searchParams.get('password'); let hwZONEID = searchParams.get('zoneid'); let hwRECORDSETID = searchParams.get('recordsetid'); let hwip = searchParams.get('ip'); let ttl = searchParams.get('ttl'); let requestURL = new URL(request.url) let path = requestURL.pathname.split('/')[1]; if(name == null){ const ip = request.headers.get("cf-connecting-ip") return new Response("华为dns更新\n使用方法：https://"+request.url+"?name=华为云账户&password=华为云密码&zoneid=域名zoneid&recordsetid=域名recordsetid&ip=IP地址&ttl=生效时间\n当前ip:"+ip,{status: 200}); } console.log(name) const body = { "auth": { "identity":…

通过Wireguard和RouterOS将服务器的ip分配给本地
type: item
date: 2022-01-30T20:07:00+08:00
description: 前几天想要把服务器中远程ip分配给家里的某台服务器使用，因此写了这个教程记录一下过程。传统的frp、ngrok虽然可以达到内网穿透的效果，但是对于全端口映射是非常不方便的，因此想到使用Wireguard和RouterOS将服务器的ip分配给本地的方案。参考这个大佬的链接：https://aoyouer.com/posts/wireguard-l3-forward/主要分为以下几个过程：1、开启net.ipv4.ip_forward2、安装wireguard3、配置wireguard服务端4、更改ssh端口5、routeros配置wireguard6、添加路由规则7、测试1、开启net.ipv4.ip_forwardecho "net.ipv4.ip_forward=1">>/etc/sysctl.conf sysctl -p2、安装wireguardapt install wireguard iptables -y #安装wireguard modprobe wireguard && lsmod | grep wireguard #验证安装是否成功2、配置wireguard服务端公钥私钥生产cd /etc/wireguard # 首先进入配置文件目录 wg genkey | tee sprivatekey | wg pubkey > spublickey wg genkey | tee cprivatekey | wg pubkey > cpublickey #生成公钥和私钥服务端配置echo "[Interface] # 服务器的私匙，对应客户端配置中的公匙（自动读取上面刚刚生成的密匙内容） PrivateKey = $(cat sprivatekey) # 本机的内网IP地址，一般默认即可，除非和你服务器或客户端设备本地网段冲突 Address = 192.168.145.1/24 PostUp = iptables -t nat -A PREROUTING -d 10.0.24.11 -p tcp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -A PREROUTING -d 10.0.24.11 -p udp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -A PREROUTING -d 10.0.24.11 -j DNAT --to-destination 10.10.0.34; iptables -t nat -A POSTROUTING -s 10.10.0.34 -j SNAT --to-source 10.0.24.11; #10.0.24.11替换为你自己的网卡地址 65533为ssh端口 65534为wireguard端口 PostDown = iptables -t nat -D PREROUTING -d 10.0.24.11 -p tcp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -D PREROUTING -d 10.0.24.11 -p udp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -D PREROUTING -d 10.0.24.11 -j DNAT --to-destination 10.10.0.34; iptables -t nat -D POSTROUTING -s 10.10.0.34 -j SNAT --to-source 10.0.24.11; #10.0.24.11替换为你自己的网卡地址 # 服务端监听端口，可以自行修改 ListenPort = 65534 # 保持默认 MTU = 1420 # [Peer] 代表客户端配置，每增加一段 [Peer] 就是增加一个客户端账号。 [Peer] # 该客户端账号的公匙，对应客户端配置中的私匙 PublicKey = $(cat cpublickey) # 该客户端账号的内网IP地址 AllowedIPs = 192.168.145.0/24,10.10.0.0/16"|sed '/^#/d;/^\s*$/d' > wg0.conf修改ssh端口vim /etc/ssh/sshd_config 修改 Port 22 改为 Port 65533 systemctl restart sshd服务端启动wg-quick up wg04、routeros配置wireguardecho "[Interface] # 客户端的私匙，对…

DNSPOD的ddns ipv6脚本
type: item
date: 2021-03-18T19:54:00+08:00
description: 分享一个自己写的DNSPOD DDNS ipv6脚本1、脚本分享#!/bin/bash DNSPOD_ID='你申请的DNSPOD ID' # DNSPOD 域名ID DNSPOD_PASSWORD='你的DNSPOD TOKEN' # DNSPOD Token RECORD_ID='域名RECORD_ID' #DNSPOD TOKEN ID SUB_DOMAIN='域名前缀' # SUB DOMAIN DOMAIN='域名后缀' # DOMAIN dns='2400:3200::1' check_ipv6_connect(){ check_connect=$(ping6 -w 3 240c::6666 -c 1 | grep ttl) if [ "$check_connect" == "" ] then echo "connect error" sleep 2 systemctl restart networking sleep 2 dhclient exit 1 fi } source /etc/profile check_ipv6_connect ipv6ustc=$(dig @240C::6666 AAAA test6.ustc.edu.cn +short) a=$(curl -s -H 'Host:test6.ustc.edu.cn' http://[$ipv6ustc]/backend/getIP.php | awk -F '"' '{print $4}') b=$(curl -s -X POST https://dnsapi.cn/Record.Info -d 'login_token='$DNSPOD_ID','$DNSPOD_PASSWORD'&format=json&domain='$DOMAIN'&record_id='$RECORD_ID'' |awk -F '"' '{print $60}') if [ "$a" != "$b" ] then curl -X POST https://dnsapi.cn/Record.Modify -d 'login_token='$DNSPOD_ID','$DNSPOD_PASSWORD'&format=json&domain='$DOMAIN'&record_id='$RECORD_ID'&sub_domain='$SUB_DOMAIN'&value='$a'&record_type=AAAA&record_line_id=0' echo "changed" else echo "no change" fi echo "success"2、参数说明DNSPOD_ID、DNSPOD_PASSWORD：点我进入DNSPOD密钥地址，创建密钥，如图所示：这两个参数填上RECORD_ID获取需要你的打卡域名解析记录，如图所示需要你使用先新建你的域名，例如blog.8086k.cn接下来打开F12，并切换到network选项按照图上方法操作可以看到两条记录，点开，如下操作添加上即可。SUB_DOMAIN:域名前缀 例如你的域名 blog.8086k.cn，那么SUB_DOMAIN就是blogDOMAIN:域名后缀 例如你的域名 blog.8086k.cn，那么DOMAIN就是8086k.cn3、使用方法放入到linux系统中，crontab中即可*/1 * * * * /root/ipv6.sh

使用LXC使用以及openwrt模板镜像制作
type: item
date: 2021-03-18T14:12:00+08:00
description: 本文主要介绍openwrt打包成lxc模板，并启动。1、LXC是什么[collapse title="LXC介绍" status="true"]Linux Container容器是一种内核虚拟化技术，可以提供轻量级的虚拟化，以便隔离进程和资源。[/collapse]2、openwrt介绍[collapse title="openwrt介绍" status="true"]OpenWrt是适合于嵌入式设备的一个Linux发行版。相对原厂固件而言，OpenWrt不是一个单一、静态的固件，而是提供了一个可添加软件包的可写的文件系统。这使用户可以自由的选择应用程序和配置，而不必受设备提供商的限制，并且可以使用一些适合某方面应用的软件包来定制你的设备。对于开发者来说，OpenWrt是一个框架，开发者不必麻烦地构建整个固件就能得到想要的应用程序；对于用户来说，这意味着完全定制的能力，与以往不同的方式使用设备，OPKG包含超过3500个软件。 默认使用LuCI作为web交互界面。[/collapse]3、LXC安装安装非常简单，apt即可。apt-get install bridge-utils apt-get install lxc lxc-checkconfig apt-get install apparmor-profiles4、配置首先桥接网卡在/etc/network/interfaces文件中添加br0网桥# /etc/network/interfaces auto br0 iface br0 inet static address ipv4地址 netmask ipv4子网掩码 bridge_ports 桥接网卡名 bridge_stp off bridge_fd 2 bridge_maxwait 20 iface br0 inet6 static address ipv6地址/120 gateway ipv6网关 dns-nameservers ipv6dns配置lxc默认文件在/etc/lxc/default.conf中添加如下内容#/etc/lxc/default.conf lxc.apparmor.profile = generated lxc.apparmor.allow_nesting = 1 lxc.net.0.type=veth lxc.net.0.link = br0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:11:22:xx:xx:xx5、使用创建镜像模板lxc-create -t download -n openwrt -- --no-validate --server mirrors.tuna.tsinghua.edu.cn/lxc-images启动容器lxc-start -n ubuntu1 -d停止容器lxc-stop --name ubuntu1销毁容器lxc-destroy --name ubuntu16、openwrt镜像制作首先下载你心仪的openwrt系统在linux下解压，使用如下命令gzip -d openwrt-x86-64-generic-squashfs-rootfs.img.gz解压之后出现openwrt-x86-64-generic-squashfs-rootfs.img文件安装squashfs-toolsapt install squashfs-tools解包会解压到squashfs-root目录进入 cd squashfs-rootunsquashfs openwrt-x86-64-generic-squashfs-rootfs.img mv squashfs-root rootfs解包后如图所示：这样lxc的rootfs就制作好了制作openwrt模板1、在/var/lib/lxc新建openwrt目录,mkdir /var/lib/lxc/openwrt touch /var/lib/lxc/openwrt/config2、把以下内容写入到config中# Template used to create this container: /usr/share/lxc/templates/lxc-download # Parameters passed to the template: --server mirrors.tuna.tsinghua.edu.cn/lxc-images # Template script checksum (SHA-1): 273c51343604eb85f7e294c8da0a5eb769d648f3 # For additional config options, please look at l…

Padavan校园网ipv6穿透教程
type: item
date: 2020-12-15T12:46:00+08:00
description: 自我折腾记录，校园网接入Padavan路由器没有ipv6，因此如果想要内网拥有IPV6，那么此教程正好适合你。1. 配置IPV6首先padavan设置需要这么设置，把IPV6打开，自动获取IPV6地址2. 配置脚本添加以下脚本到自定义设置->脚本->在路由器启动后执行的最后一行，如图所示modprobe ip6table_mangle ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth2.2 brctl addif br0 eth2.23. 重启电脑，IPV6就可以连上了。[scode type="blue"]参考博客：https://www.jianshu.com/p/ed34cbf3b90c[/scode]

猫盘群晖内网穿透npc打包全过程
type: item
date: 2020-03-26T17:38:00+08:00
description: 本文主要内容是打包arm的spk文件,为以后自己方便查阅。一、nps介绍[collapse title="nps介绍" status="true"]nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。balabala...具体详情请见github作者地址[/collapse]二、起因[scode type="yellow"]发现nps作者github下又群晖的安装包，但是是x86的，想着自己有个扎矿猫盘刷了群晖，是arm架构的，那么没办法，自己编译吧。-_-自己动手丰衣足食.jpg[/scode]三、逐渐的看代码过程。。。pass本次关键：从nps项目下的build.sh脚本看出来怎么部署，那么就按照build.sh脚本来吧废话不说了 进入正题吧四、正题开始4.1 部署环境[scode type="blue"]首先安装docker，安装过程pass，不会的请参照本博客其他帖子。[/scode]4.2 下载nps、docker镜像、spksrcroot@server:~# mkdir WorkShop #新建工作目录 root@server:~/WorkShop# https://github.com/ehang-io/nps.git # git clone nps项目 root@server:~/WorkShop# git clone https://github.com/cnlh/spksrc.git ~/WorkShop/spksrc # git clone spksrc项目 root@server:~/WorkShop# mkdir ~/WorkShop/spksrc/nps && cp -rf /root/WorkShop/nps/* ~/WorkShop/spksrc/nps/ # 拷贝文件 root@server:~/WorkShop/nps# docker pull synocommunity/spksrc #拉取镜像 有点大-_- root@server:~/WorkShop/nps# docker run -itd --name spksrc --env VERSION=0.26.6 -e GOPROXY=direct -v ~/WorkShop/spksrc:/spksrc synocommunity/spksrc /bin/bash # 运行容器 root@server:~/WorkShop/nps# docker exec -it spksrc /bin/bash -c 'cd /spksrc && make setup && cd /spksrc/spk/npc && make' # a few moments later... # 先试着编译X86的 没问题进行下一步[scode type="blue"]到这里有两种方法，一种简单点，另一种需要改Makefile文件[/scode][scode type="red"]第一种方法[/scode]root@server:~/WorkShop/nps# docker exec -it spksrc /bin/bash -c 'cd /spksrc/spk/npc && make clean && cd /spksrc && make setup && cd /spksrc/spk/npc && make arch-aarch64' # 直接加架构，编译成功 #可以直接把~/WorkShop/spksrc/packages/里的spk文件复制出来直接用了[scode type="red"]第二种方法[/scode]#更改Makefile root@server:~/WorkShop/spksrc/spk/npc# pwd /root/WorkShop/spksrc/spk/npc[scode type="blue"]把47行左右改为[/scode]ifeq ($(findstring $(ARCH),armada37xx),$(ARCH)) GO_ARCH = arm64 endif[scode type="blue"]之后执行一下代码，同样可以编译成功[/scode]root@harbor:~/WorkShop/spksrc/spk/npc# docker exec -it spksrc /bin/bash -c 'cd /spksrc/spk/npc && make clean && cd /spksrc && make setup && cd /spksrc/spk/npc && make arch-armada37xx-6.2' root@harbor:~/WorkShop/spksrc/packages# pwd /root/WorkShop…

harbor制作私有docker仓库
type: item
date: 2020-03-24T21:30:00+08:00
description: 本文主要内容是搭建harbor,并且记录自己的一些踩坑记录，为以后自己方便查阅。一、harbor1.1 harbor介绍[collapse title="harbor介绍" status="true"]Harbor是VMware公司开源的企业级Docker Registry项目，其目标是帮助用户迅速搭建一个企业级的Docker私有镜像仓库。Harbor基于官方Registry V2实现，提供了管理UI，基于角色的访问控制，LDAP集成、镜像复制、以及审计日志等企业用户需求的功能。balabala...具体详情请见baidu[/collapse]二、harbor安装[scode type="blue"]harbor安装没什么太大难度，具体请看代码。[/scode]2.1 首先需要安装docker[scode type="blue"]我选择的docker版本是19.03.8，系统是ubuntu16.04[/scode]参照官方安装教程安装root@vps:~# apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common #安装依赖 root@vps:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - root@vps:~# apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S] root@vps:~# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" root@vps:~# apt-get update root@vps:~# apt-get install docker-ce docker-ce-cli containerd.io #安装docker，不出意外应该可以成功安装[scode type="blue"]如果是其他系统，请参考官网文档[/scode]2.2 安装docker-composeroot@vps:~# wget https://github.com/docker/compose/releases/download/1.26.0-rc3/docker-compose-Linux-x86_64 #下载docker-compose root@vps:~# cp ./docker-compose-Linux-x86_64 /usr/local/bin/docker-compose #放入/usr/local/bin/文件夹 root@vps:~# chmod +x /usr/local/bin/docker-compose #给执行权限 root@vps:~# docker-compose --version docker-compose version 1.26.0-rc3, build 46118bc5 #查看版本2.3 接下来安装harbor[scode type="blue"]我个人使用的是在线安装harbor[/scode]root@vps:~# wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-online-installer-v1.10.1.tgz #下载harbor root@vps:~# tar -zxvf harbor-online-installer-v1.10.1.tgz #解压 root@vps:~# cd harbor/ #进入harbor目录 root@vps:~# vim harbor.yml #编辑harbor.yml配置文件，每个参数后都有注释，这里就不解释了 root@vps:~# ./install.sh #安装2.4 harbor安装完成了可以去登录进去看看了，默认有一个library公有仓库，可以删除，放个截图：[scode type="blue"]随心所欲修改吧。[/scode]2.5 问题如果你有问题，请跟我接着看：[scode type="bl…

Proxmox VE(PVE)开启IOMMO并开启网卡(82576)SRIOV功能【时隔半年，我回来了】
type: item
date: 2020-02-21T18:48:00+08:00
description: 82576在KVM虚拟机下使用网卡的SRIOV功能直通进虚拟机，减少使用Proxmox VE虚拟网卡的NAT功能，提高网卡性能，降低CPU占用。哔哩哔哩链接：文字不带劲，来视频一、pve介绍简单来说：Proxmox VE是一个集成OPENVZ 支持KVM应用的环境。二、单根I/O虚拟化(SRIOV)介绍[collapse title="单根I/O虚拟化(SRIOV)介绍" status="false"]I/O虚拟化可以提高服务器性能和简化硬件要求，而且同时可以在服务器上增加I/O密集型虚拟机的最大数量。SR-IOV技术现已可以开始把具有SR-IOV功能的设备定义成为一种外围设备物理功能模块（PF）并且使之能与主机hypervisor系统直接相互交互信息。PF主要用于在服务器中告诉hypervisor系统关于物理PCI设备运行的状态是否可用。 SR-IOV在操作系统层，现在能在所有的外围物理设备PF下，创建不只一个的虚拟功能设备（VFs）。VFs能共享外围设备的物理资源（像网卡端口或网卡缓存空间）并且与SR-IOV服务器上的虚拟机系统进行关联。SR-IOV能允许一个物理PCIe设备把自身虚拟为多个虚拟PCIe设备。[/collapse]三、基础环境以及软件安装Proxmox VE 5.4CPU:E5645*2网卡：intel 825763.1 软件安装安装基本的软件root@pve:~# apt update root@pve:~# apt-get install net-tools vim ethtool -y\3.2 打开IOMMU在/etc/default/grub文件里，GRUB_CMDLINE_LINUX_DEFAULT行添加以下内容那么使用vim打开文件，添加如果你是intel CPU。GRUB_CMDLINE_LINUX_DEFAULT=" intel_iommu=on pcie_acs_override=downstream"如果你是AMD CPU，那么添加一下内容：GRUB_CMDLINE_LINUX_DEFAULT=" amd_iommu=on pcie_acs_override=downstream"更新grubroot@pve:~# update-grub在/etc/modules文件里添加如下内容：使用vim打开/etc/modules，添加一下内容： vfio vfio_iommu_type1 vfio_pci vfio_virqfd更新并重启root@pve:~# update-initramfs -u -k all root@pve:~# reboot3.3 检查IOMMO功能是否开启root@pve:~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi [ 1.140539] DMAR: Host address width 40 [ 1.140626] DMAR: DRHD base: 0x000000fbffe000 flags: 0x1 [ 1.140740] DMAR: dmar0: reg_base_addr fbffe000 ver 1:0 cap c90780106f0462 ecap f020f6 [ 1.140865] DMAR: RMRR base: 0x000000000ed000 end: 0x000000000effff [ 1.140959] DMAR: RMRR base: 0x000000bf7ed000 end: 0x000000bf7fffff [ 1.141053] DMAR: ATSR flags: 0x0 [ 1.141445] DMAR: dmar0: Using Queued invalidation [ 1.141552] DMAR: Setting RMRR: [ 1.141911] DMAR: Setting identity map for device 0000:00:1a.0 [0xbf7ed000 - 0xbf7fffff] [ 1.142336] DMAR: Setting identity map for device 0000:00:1a.7 [0xbf7ed000 - 0xbf7fffff] [ 1.142711] DMAR: Setting identity map for device 0000:00:1d.0 [0xbf7ed000 - 0xbf7fffff] [ 1.143088] DMAR: Setting identity map for device 0000:00:1d.1 [0xbf7ed000 - 0xbf7fffff] [ 1.144741] DMAR: Setting id…

树莓派镜像制作
type: item
date: 2019-07-08T12:45:00+08:00
description: 因为需要4.19的内核，需要制作树莓派的img镜像，因此，就顺便编译一下树莓派3B+的内核，并制作成树莓派镜像。树莓派镜像制作一、树莓派介绍[collapse title="树莓派介绍" status="false"]树莓派由注册于英国的慈善组织“Raspberry Pi 基金会”开发，Eben·Upton/埃·厄普顿为项目带头人。2012年3月，英国剑桥大学埃本·阿普顿（Eben Epton）正式发售世界上最小的台式机，又称卡片式电脑，外形只有信用卡大小，却具有电脑的所有基本功能，这就是Raspberry Pi电脑板，中文译名"树莓派"。[/collapse]二、基础环境使用X86交叉编译需要10G的硬盘空间[scode type="blue"]本文使用的是ubuntu 16.04的系统[/scode]三、基础环境安装3.1 编译内核用的工具gcc[scode type="blue"]本文使用gcc-4.9下载地址：https://releases.linaro.org/components/toolchain/binaries/[/scode]3.1.1下载并配置gcc64位下载root@ubuntu16:~# wget https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz # 下载64位gcc root@ubuntu16:~# mkdir ~/toolchains # 创建文件夹 root@ubuntu16:~# tar xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz -C ~/toolchains/ # 解压缩 root@ubuntu16:~# cd ~/toolchains/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/ root@ubuntu16:~# echo 'export PATH=${PATH}:$(pwd)/bin' > env.sh # 创建环境变量 root@ubuntu16:~# source env.sh # 让环境变量在当前终端生效32位下载root@ubuntu16:~# wget https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-i686_aarch64-linux-gnu.tar.xz # 下载32位gcc root@ubuntu16:~# mkdir ~/toolchains # 创建文件夹 root@ubuntu16:~# tar xf gcc-linaro-4.9-2017.01-i686_aarch64-linux-gnu.tar.xz -C ~/toolchains/ # 解压缩 root@ubuntu16:~# cd ~/toolchains/gcc-linaro-4.9.4-2017.01-i686_aarch64-linux-gnu/ root@ubuntu16:~# echo 'export PATH=${PATH}:$(pwd)/bin' > env.sh # 配置环境变量 root@ubuntu16:~# source env.sh # 让环境变量在当前终端生效3.2 安装依赖环境[scode type="blue"]依赖环境安装[/scode]root@ubuntu16:~# sudo apt install build-essential bison make debootstrap qemu-user-static kpartx util-linux vim git libncurses5-dev bc git dosfstools -y # 安装依赖 root@ubuntu16:~# sudo service binfmt-support start # 启动binfmt服务3.3 下载内核并配置3.3.1 下载内核root@ubuntu16:~# mkdir ~/kernel root@ubuntu16:~# cd ~/kernel # 创建文件夹并进入 root@ubuntu16:~# git clone https://github.com/raspberrypi/linux.git # 下载linux内核3.4 下载树莓派的…