使用QEMU搭建U-Boot+LinuxKernel+busybox+NFS嵌入式开发环境

目录

  • 0.课程大纲
  • 1.为什么要使用QEMU学习嵌入式
    • QEMU简介
    • 使用QEMU可以做哪些事情?
    • 当前嵌入式行业现状
    • 如何适应这种变化
    • 使用QEMU学习嵌入式有哪些好处?
    • 驱动开发技能
    • 为什么要学习Linux
  • 2.搭建嵌入式开发基本环境
    • 2.1.安装u-boot-tools
    • 2.2.安装交叉编译工具
      • 什么是ABI和EABI
  • 3.QEMU安装及仿真开发板介绍
    • 自动安装
    • 手动编译安装
    • QEMU使用
    • ARM express 开发板简介
      • Vexpress系列开发板
      • Vexpress系列支持的CPU
      • 嵌入式最小系统
    • QEMU运行系统
  • 4.编译Linux内核和dtb文件
    • 4.1.下载Linux内核
    • 4.2.修改Makefile
    • 4.3.编译内核,模块,dtb文件
  • 5.使用Busybox制作根文件系统
    • 5.1.什么是根文件系统?
      • 5.1.1.文件系统
      • 5.1.2.为什么要使用文件系统
      • 5.1.3.根文件系统
    • 5.2.使用busybox制作根文件系统
      • 5.2.1.什么是busybox
      • 5.2.2.编译安装
      • 5.2.3.制作根文件系统
      • 5.2.4.制作SD卡文件系统镜像
  • 6.使用u-boot引导启动Linux内核
    • 6.1.嵌入式启动概述
      • 6.1.1.嵌入式bootloader
      • 6.1.2.常见的启动方式
    • 6.2.u-boot编译
    • 6.3.QEMU网络功能设置
      • 6.3.1.配置QEMU与主机的网络连接
      • 6.3.2.配置
    • 6.4.内核配置编译
      • 6.4.1.使用u-boot引导内核镜像
    • 6.5.主机TFTP工具安装
    • 6.6.启动测试
    • 6.7.自动化引导
  • 参考资料

0.课程大纲

  1. 为什么要使用QEMU学习嵌入式
  2. 搭建嵌入式开发基本环境
  3. QEMU安装及A9开发板配置介绍
  4. 编译,运行Linux内核
  5. 使用Busybox制作根文件系统
  6. 使用u-boot引导启动Linux内核
  7. 挂载NFS文件系统
  8. 在虚拟开发板上开发应用程序,驱动

1.为什么要使用QEMU学习嵌入式

QEMU简介

  • QEMU是一个模拟器,可以模拟CPU,ARM,X86,MIPS等架构
  • 可以仿真的ARM处理器:ARM926E,ARM1136,Cortex-A8/A9
  • 模拟真实的开发板,外设:串口,LCD,网卡,USB,SD卡…

使用QEMU可以做哪些事情?

  • 研究内核虚拟化
  • 模拟CPU,对于芯片公司,流片之前在QEMU上做验证,仿真,软硬件协同设计,开发BSP和驱动
  • 模拟开发板,在模拟平台上进行系统软件开发,驱动开发
  • 学生,工程师可以利用qemu-system-arm学习嵌入式开发,研究Bootloader,Linux内核,驱动开发,应用开发等.

当前嵌入式行业现状

  • CPU厂家越来越多,各种开发板层出不穷
  • 物联网芯片,AI芯片…
  • SOC越来越集成化,软硬件分工越来越明显

如何适应这种变化

  • 分工
  • 精专
  • 嵌入式80%的知识系统和技能,都可以脱离"开发板",在QEMU仿真平台上学习和练习

使用QEMU学习嵌入式有哪些好处?

  • 节省学习成本
  • 跳过开发板,硬件的各种"坑",缩短学习曲线
  • 重构嵌入式知识体系和技能,跟硬件无关的放到QEMU上学习
  • 跟开发板相关的驱动,BSP针对具体开发板深入突破
  • 适应不同CPU,开发板的技术要求

驱动开发技能

  • 基本的硬件知识
  • Linux内核,系统架构的理解
  • 芯片手册,开发板

为什么要学习Linux

  • 开源,免费

  • 持续更新,强大的BSP支持

  • Android,YunOS,Tizen,ubuntu等操作系统的内核

  • 应用领域广:嵌入式,服务器,桌面PC,云…

  • 示例

2.搭建嵌入式开发基本环境

2.1.安装u-boot-tools

  • 用来生成适应U-boot引导的镜像文件格式
sudo apt install -y u-boot-tools

2.2.安装交叉编译工具

什么是ABI和EABI

  • ABI:二进制应用程序接口(Application Binary Interface(ABI) for the ARM Architecture),在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口,涵盖了数据类型的大小,布局和对齐,调用约定.
  • EABI:嵌入式ABI 嵌入式应用二进制接口指定了文件格式,数据类型,寄存器使用,堆积组织优化和在一个嵌入式软件中的参数的标准约定.
  • Arm-none-gnueabi-linux比arm-linux-gcc要好,在可一致性,兼容性上面
  • 早期u-boot和Linux编译可能使用的都不是一个arm-linux-gcc版本
sudo apt install -y gcc-arm-linux-gnueabi
sudo apt install -y g++-arm-linux-gnueabi
#区别
gcc-arm-linux-gnueabi    
gcc-arm-linux-gnueabihf
gcc-arm-none-eabi
arm-linux-gnueabi-gcc -v
arm-linux-gnueabi-gcc -o hello main.c
readelf -h hello

3.QEMU安装及仿真开发板介绍

自动安装

# For full system emulation
sudo apt install qemu-system

#For emulating Linux binaries
sudo apt install qemu-user-static

手动编译安装

https://www.qemu.org/
https://wiki.qemu.org/Hosts/Linux

git clone https://gitlab.com/qemu-project/qemu.git
git checkout remotes/origin/stable-8.2 -b stable-8.2

sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build

sudo apt-get install git-email
sudo apt-get install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev
sudo apt-get install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt-get install librbd-dev librdmacm-dev
sudo apt-get install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev
sudo apt-get install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev
sudo apt-get install valgrind xfslibs-dev 

sudo apt-get install libnfs-dev libiscsi-dev

./configure --target-list=arm-softmmu --audio-drv-list=
make 
sudo make install

QEMU使用

qemu-system-arm --version

#查看支持的开发板
qemu-system-arm -M help
#vexpress-a9

ARM express 开发板简介

Vexpress系列开发板

  • 全称versatile express family, ARM公司自己推出的开发板
  • 主要用于SOC厂商设计,验证和测试自己的SOC芯片
  • 采用主板+子板设计,主板提供各种外围接口,子板提供CPU运算

Vexpress系列支持的CPU

  • Cortex-A9: 处理器子板 Express A9x4 (V2P-CA9x4)
  • Cortex-A5: 处理器子板 Express A5x2 (V2P-CA5x2s)
  • Cortex-R5:
  • Cortex-A15: 处理器子板 Express A15x2 (V2P-CA15x2)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
DDR
外围
DUI0448I_v2p_ca9_trm.pdf

嵌入式最小系统

CPU+DDR/SDRAM
FLASH/SD
串口+LCD

QEMU运行系统

#-M vexpress-a : 指定具体开发板
#-m 512M : 指定内存大小
#-kernel ./zImage : 指定内核
#-dtb ./vexpress-v2p-ca9.dtb : 指定设备树
#-nographic : 不使用图像界面
#-append "console=ttyAMA0" : 指定串口控制台
qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"

4.编译Linux内核和dtb文件

4.1.下载Linux内核

https://www.kernel.org/
longterm

4.2.修改Makefile

vim Makefile
ARCH        ?= arm
CROSS_COMPILE ?=arm-linux-gnueabi-

4.3.编译内核,模块,dtb文件

make vexpress_defconfig
make zImage
make modules
make dtbs

5.使用Busybox制作根文件系统

5.1.什么是根文件系统?

5.1.1.文件系统

对存储设备上的数据进行组织的机制

5.1.2.为什么要使用文件系统

  • Linux的哲学: 一切皆文件
  • 用户与操作系统进行交互的主要工具: 文件系统调用
  • 用户和底层存储的接口

5.1.3.根文件系统

  • Linux内核启动后第一个挂载的文件系统
  • 主要由基本的shell命令,各种库,字符设备,配置脚本组成
  • 提供了根目录/
  • RFS可以放在: nor/nand flash, SD卡, 磁盘, 网络空间上

5.2.使用busybox制作根文件系统

5.2.1.什么是busybox

  • 一个集成100多个Linux常用命令和工具的软件
  • 一个适合制作嵌入式文件系统的软件工具

5.2.2.编译安装

#1.下载源代码
https://busybox.net/
#2.修改Makefile
ARCH ?= arm
CROSS_COMPILE ?=arm-linux-gnueabi-
#3.配置
make defconfig
make menuconfig
 Settings  --->  [*] Build static binary (no shared libs)
#4.编译
make -j2
#5.安装
make install
#安装生成目录"_install"

5.2.3.制作根文件系统

mkdir rootfs
cd rootfs/
mkdir lib
cp -avf busybox-1.36.1/_install/* rootfs/
cp -avf /usr/arm-linux-gnueabi/lib/* rootfs/lib/
mkdir dev
cd dev/

#mknod: 创建块或字符设备节点
#-m 666: 权限读写
#tty1: 节点名称
#c: 字符设备
#4: 主设备号
#1: 次设备号
sudo mknod -m 666 tty1 c 4 1
sudo mknod -m 666 tty2 c 4 2
sudo mknod -m 666 tty3 c 4 3
sudo mknod -m 666 tty4 c 4 4

sudo mknod -m 666 console c 5 1

sudo mknod -m 666 null c 1 3

5.2.4.制作SD卡文件系统镜像

#1.生成镜像
#bs: 缓冲区块的大小
#count: 块的个数
dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
#2.格式化为ext3文件系统
mkfs.ext3 rootfs.ext3
#3.将各种文件copy到文件系统镜像中
sudo mount -t ext3 rootfs.ext3 /mnt -o loop
sudo cp -avf rootfs/* /mnt
sudo umount /mnt

6.使用u-boot引导启动Linux内核

6.1.嵌入式启动概述

6.1.1.嵌入式bootloader

  • 功能类似于PC的BIOS,硬件检测是否正常
  • 加载操作系统镜像到RAM
  • 设置不同的启动方式

6.1.2.常见的启动方式

  • NOR/NAND FLASH启动
  • 从SD卡启动
  • Bootloader从网络加载Linux内核启动

6.2.u-boot编译

#1.下载u-boot
git clone https://gitee.com/naonano/u-boot.git
git checkout --track origin/u-boot-2023.07.y

#2.修改 Makefile
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
CROSS_COMPILE ?=arm-linux-gnueabi-

#3.修改 config.mk
#ARCH := $(CONFIG_SYS_ARCH:"%"=%)
ARCH := arm

#4.配置
make vexpress_ca9x4_defconfig

#5.编译
make -j2

#6.运行u-boot
qemu-system-arm -M vexpress-a9 -m 512M -nographic -kernel ../test/u-boot/u-boot

6.3.QEMU网络功能设置

6.3.1.配置QEMU与主机的网络连接

  • 采用桥接(bridge)的网络连接与Host通信
  • 需要主机内核tun/tap模块支持

6.3.2.配置

参考:ubuntu 22.04 设置网桥 - netplan

#1.主机安装工具包
sudo apt install -y uml-utilities bridge-utils
#2.创建tun设备文件
ls -al /dev/net/tun
#3.编辑文件
sudo touch /etc/netplan/br0.yaml
#使用ipv4 dhcp

ipv4 dhcp:

network:
  version: 2
  ethernets:
    enp0s8: #替换为实际网卡
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [enp0s8] #替换为实际网卡
      dhcp4: true
      parameters:
        stp: false
      dhcp6: false

ipv4 静态分配:

network:
  version: 2
  ethernets:
    enp0s8:#替换为实际网卡
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [enp0s8] #替换为实际网卡
      dhcp4: false
      addresses: [192.168.1.250/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [114.114.114.114]
      parameters:
        stp: false
      dhcp6: true
sudo netplan apply

ifconfig

br0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        inet 192.168.1.25  netmask 255.255.255.0  broadcast 192.168.1.255

        inet6 fe80::3027:2dff:fe41:8595  prefixlen 64  scopeid 0x20<link>

        ether 32:27:2d:41:85:95  txqueuelen 1000  (Ethernet)

        RX packets 55  bytes 9272 (9.2 KB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 89  bytes 12062 (12.0 KB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.1.3  netmask 255.255.255.0  broadcast 192.168.1.255

        inet6 fe80::c8ff:ec6f:253e:ad4e  prefixlen 64  scopeid 0x20<link>

        inet6 2409:8a1e:d52:a9b0:39df:8d80:83d3:9e  prefixlen 64  scopeid 0x0<global>

        inet6 2409:8a1e:d52:a9b0:3292:9a45:5481:28ad  prefixlen 64  scopeid 0x0<global>

        ether 08:00:27:05:ef:4f  txqueuelen 1000  (Ethernet)

        RX packets 962  bytes 156528 (156.5 KB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 836  bytes 88212 (88.2 KB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 1000  (Local Loopback)

        RX packets 318  bytes 29095 (29.0 KB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 318  bytes 29095 (29.0 KB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


6.4.内核配置编译

6.4.1.使用u-boot引导内核镜像

#需要将内核编译为uImage格式
#需要指定uImage的加载地址
#编译时指定: 
make LOADADDR=0x60003000 uImage -j2

6.5.主机TFTP工具安装

#1.安装
sudo apt-get install -y tftpd-hpa tftp-hpa xinetd
#2.配置ftp服务器工作目录为"/home/tftp"
sudo vim /etc/default/tftpd-hpa
	TFTP_USERNAME="tftp"
	TFTP_DIRECTORY="/home/tftp"
	TFTP_ADDRESS=":69"
	TFTP_OPTIONS="-l -c -s"
#3.建立目录
sudo mkdir -p /home/tftp
sudo chown lei:lei /home/tftp
chmod 777 -R /home/tftp
#4.启动服务
sudo service tftpd-hpa restart
#5.测试
#5.1测试下载
cd /home/tftp/
touch readme.txt
#在readme.txt中输入一些内容
#运行开发板,进入控制台
tftp -g -r readme.txt 192.168.10.107
#可以看出在开发板当前目录下下载了readme.txt
#5.2测试上传
#在开发板上,进入控制台运行命令
tftp -p -l uvc_app 192.168.10.107
#uvc_app为开发板当前目录下的文件
#在ubuntu上可以看到开发板上传上来的文件uvc_app

6.6.启动测试

#1.复制u-boot镜像到tftp服务器目录下
cp /home/qemu/test/u-boot/u-boot /home/tftp/
#2.复制uImage镜像到tftp服务器目录下
cp /home/qemu/test/linux-6.6.18/arch/arm/boot/uImage /home/tftp/
#3.复制设备树二进制编译结果到tftp服务器目录下
cp /home/qemu/test/linux-6.6.18/arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtb /home/tftp/
#4.uboot引导kernel启动
qemu-system-arm \
    -M vexpress-a9 \
    -m 512M \
    -nographic \
    -kernel /home/tftp/u-boot \
    -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
    -sd /home/qemu/test/rootfs.ext3

6.7.自动化引导

u-boot/include/configs/vexpress_common.h

#define CONFIG_BOOTCOMMAND \
	"tftp 0x60003000 uImage; tftp 0x60500000 vexpress-v2p-ca9.dtb; \
	setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0'; \
	bootm 0x60003000 - 0x60500000; "

#define CONFIG_IPADDR 192.168.244.128
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_SERVERIP 192.168.244.129

参考资料

B站

QEMU系列文章: https://blog.csdn.net/phmatthaus/category_12072874.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DSI2协议之BTA行为理解

概念: DSI协议spec支持总线控制权在master和slave之间发生交换,即通过bus turn around来实现; BUS TURN AROUND: BTA 的实现是通过controller—>cdphy的turnrequest信号来实现; 关于控制器发出turnrequest给phy,phy通过lvds/trio线输出turnaround sequence如下图中…

C++基于多设计模式下的同步异步日志系统day3

C基于多设计模式下的同步&异步日志系统day3 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&am…

C习题002:澡堂洗澡

问题 输入样例 在这里给出一组输入。例如&#xff1a; 2 5 1 3 3 2 3 3 输出样例 在这里给出相应的输出。例如&#xff1a; No代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 代码 #include<stdio.h> int main() {int N,W,s,t,p;int arr_s[…

投影和定义投影的区别

Arcmap中关于投影的工具有四个&#xff0c;分别是定义投影、投影、投影栅格、批量投影。这四个工具既有相同之处也有不同之处&#xff0c;下面我将一一介绍。 ①定义投影&#xff1a;Arcmap中关于定义投影工具是这样描述的&#xff1a;“所有地理数据集均具有一个用于显示、测…

小白必看的Python函数讲解

定义函数 我们通过斐波那契数列来理解定义函数 >>> def fib(n): # 将斐波那契数列打印到 n ... """将斐波那契数列打印到 n""" ... a, b 0, 1 ... while a < n: ... print(a, end ) ... a, b b, …

【Linux安装软件命令及vim、gcc使用说明】

安装软件命令 Linux安装软件的命令首先要进入管理员权限 首先在终端输入sudo su切换到管理员界面 输入对应的密码&#xff0c;注意这里的密码不会显示出来&#xff0c;输完密码之后回车即可。当出现root就代表已经是管理员界面了。 如果相应退出管理员界面输入exit即可。 注…

出现这6点症状,不要拖延,不然植物神经紊乱会找到你!

植物神经紊乱&#xff0c;是一种由于自主神经系统失衡引起的疾病。自主神经系统主要负责调节人体内脏器官的功能&#xff0c;包括心脏、血管、消化系统等&#xff0c;一旦失衡将导致一系列不适症状。植物神经紊乱的主要原因包括长期的焦虑、压力、过度疲劳、情绪波动、生活节奏…

从零开始的二进制漏洞挖掘(1)路由器漏洞挖掘(去实战版)

前言 路由器的洞大部分都是栈溢出&#xff0c;如果想要了解一些相关的知识&#xff0c;可以去看我的pwn和二进制安全虚拟机Protostar靶场系列文章&#xff0c;传送门&#xff1a; https://blog.csdn.net/qq_45894840/category_12002228.html?spm1001.2014.3001.5482ghidra安…

2024全新手机软件下载应用排行、平台和最新发布网站,采用响应式织梦模板

这是一款简洁蓝色的手机软件下载应用排行、平台和最新发布网站&#xff0c;采用响应式织梦模板。 主要包括主页、APP列表页、APP详情介绍页、新闻资讯列表、新闻详情页、关于我们等模块页面。 地 址 &#xff1a; runruncode.com/php/19703.html 软件程序演示图&#xff1a;…

领域驱动设计(Domain-Driven Design DDD)——战略设计1

一、概述 随着系统的增长&#xff0c;它会越来越复杂&#xff0c;当我们无法通过分析对象来理解系统的时候&#xff0c;就需要掌握一些操纵和理解大模型的技术了。 最负雄心的企业欲实现一个涵盖所有业务、紧密集成的系统。因大型公司的业务模型巨大且复杂&#xff0c;很难把它…

Elasticsearch:如何创建搜索引擎

作者&#xff1a;Jessica Taylor 搜索引擎是生活中我们认为理所当然的事情之一。 每当我们寻找某些东西时&#xff0c;我们都会将一个单词或短语放入搜索引擎&#xff0c;就像魔术一样&#xff0c;它会为我们提供一个匹配结果列表。 现在可能感觉不那么神奇了&#xff0c;因为这…

【CSS】(标准流部分)易忘知识点汇总

一、元素 块元素 常见的块元素&#xff1a; <h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>行内元素 常见的行内元素&#xff1a; <a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins&…

卷积神经网络CNN

图像基础知识 图像是由像素点组成的&#xff0c;每个像素点的取值范围为 : [0, 255] 。像素值越接近于 0 &#xff0c;颜色越暗&#xff0c;接近于黑色&#xff1b;像素值越接 近于255 &#xff0c;颜色越亮&#xff0c;接近于白色。 在深度学习中&#xff0c;我们使用的图像…

图神经网络实战——图论基础

图神经网络实战——图论基础 0. 前言1. 图属性1.1 有向图和无向图1.2 加权图和非加权图1.3 连通图和非连通图1.4 其它图类型 2. 图概念2.1 基本对象2.2 图的度量指标2.2 邻接矩阵表示法 3. 图算法3.1 广度优先搜索3.2 深度优先搜索 小结系列链接 0. 前言 图论 (Graph theory) …

@Transactional--开启事物后换源报错

一、问题出现的场景 系统架构设计、每个企业一个企业库、通过数据源切在平台库、和企业库之间动态切换完成业务操作。 二、跨库事物失效的原因 1、SpringTransactional不支持跨数据源事物&#xff0c;Spring 事物控制是基于数据库链接进行的&#xff0c;当数据源切换后&#x…

Python算法题集_单词搜索

Python算法题集_单词搜索 题22&#xff1a;单词搜索1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【原始矩阵状态回溯】2) 改进版一【字典检测原始矩阵状态回溯】3) 改进版二【矩阵状态回溯】 4. 最优算法5. 相关资源 本文为Python算法题集之一…

【Datawhale组队学习:Sora原理与技术实战】Attention

Attention Attention 注意力&#xff0c;从两个不同的主体开始。 论文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓&#xff1a;https://github.com/google/seq2seq 计算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

electron-release-server部署electron自动更新服务器记录

目录 一、前言 环境 二、步骤 1、下载上传electron-release-server到服务器 2、宝塔新建node项目网站 3、安装依赖 ①npm install ②安装并配置postgres数据库 ③修改项目配置文件 ④启动项目 ⑤修改postgres的认证方式 ⑥Cannot find where you keep your Bower p…

Sqli-labs靶场第12关详解[Sqli-labs-less-12]

Sqli-labs-Less-12 #手工注入 post传参了 根据题目看&#xff0c;像一个登录页面&#xff0c;尝试使用布尔型盲注测试能否登录网站 1. Username输入a a" 测试是否会有报错&#xff0c;burp抓包 报错&#xff1a;syntax to use near "a"") and passw…

【风格迁移】pix2pixHD:高分辨率图像生成

pix2pixHD&#xff1a;高分辨率图像生成 提出背景问题1: 如何提高生成图像的照片级真实感和分辨率&#xff1f;问题2: 如何利用实例级别的对象语义信息进一步提高图像质量&#xff1f;问题3: 如何实现图像合成的多模态性&#xff0c;允许交互式对象编辑&#xff1f; pix2pixHD …