当前位置: 首页 > news >正文

基于 systemc-2.3.1的virtual device 接入 qemu-arm


1,下载systemc-2.3.1

下载网址:

SystemC Files

$ wget https://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.1.tgz

2,编译安装 systemc-2.3.1

tar zxf systemc-2.3.1.tgz
cd systemc-2.3.1/
export CXX=g++
mkdir build
cd build/
mkdir /home/hipper/ex_systemc_qemu/toolchain/SystemC   # who i am -> hipper
export CXX=g++
../configure --prefix=/home/hipper/ex_systemc_qemu/toolchain/SystemC
make -j
make install
ls /home/hipper/ex_systemc_qemu/toolchain/SystemC

3,下载 demo

3.1 下载

打开:

https://caslab.ee.ncku.edu.tw/dokuwiki/course:ca:106

wget 之:

$ wget https://caslab.ee.ncku.edu.tw/dokuwiki/_media/course:ca:106a:ca_lab_attachedfiles.zip

3.2 解压编译

$ unzip course\:ca\:106a\:ca_lab_attachedfiles.zip

$ cd CA_LAB_AttachedFiles/

$ unzip LAB4.zip

$ cd LAB4/

$ ls

$ cd SystemC_Module/

$ vim makefile

修改: CXX 和 SYSTEMC_DIR 的值;

CXX                     :=g++ -std=c++11SYSTEMC_DIR     :=/home/hipper/ex_systemc_qemu/toolchain/SystemC

$ make -j

$ ls

3.3 运行demo

$ export LD_LIBRARY_PATH=/home/hipper/ex_systemc_qemu/toolchain/SystemC/lib-linux64

$ ./qsysbridge

4,源码安装 qemu-arm

一堆普通用户命令:

git clone https://github.com/qemu/qemu.git
cd qemu/
git checkout v9.0.0
mkdir build_v9_arm/
cd ../build_v9_arm/
../configure --target-list="arm-softmmu,arm-linux-user" --prefix=/home/hipper/ex_systemc_qemu/qemu-bin-v9-arm
make -j
make install

 $ ls /home/hipper/ex_systemc_qemu/qemu-bin-v9-arm

其中,qemu-arm 由配置选项 arm-linux-user 指定;
而 qemu-system-arm 由qemu编译前配置选项 arm-softmmu 指定。

5,在qemu中安装Linux

5.1 获得x86上的cross arm-gcc

 5.1.1 安装

$ sudo apt-get install gcc-arm-linux-gnueabi#check
$ dpkg -l gcc-arm-linux-gnueabi

 5.1.2 测试 arm-gcc 和 qemu-arm

实例代码

hello.c

#include <stdio.h>int main()
{printf("Hello world!!!!!\n");return 0;
}

编译:

$ arm-linux-gnueabi-gcc hello.c -o hello

设置:

error1:

qemu-arm: Could not open '/lib/ld-linux.so.3': No such file or directory

$ sudo find /usr/ -name ld-linux.so.3
/usr/arm-linux-gnueabihf/lib/ld-linux.so.3
/usr/arm-linux-gnueabi/lib/ld-linux.so.3

error2:

$ sudo find /usr/ -name libc.so.6
/usr/arm-linux-gnueabihf/lib/libc.so.6
/usr/arm-linux-gnueabi/lib/libc.so.6
/usr/lib/i386-linux-gnu/libc.so.6
/usr/lib/x86_64-linux-gnu/libc.so.6

$ sudo cp /usr/arm-linux-gnueabi/lib/ld-linux.so.3 /lib/
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/arm-linux-gnueabi/lib

 这个 /lib/ld-linux.so.3 测试结束后可以删掉

运行:

$ ../qemu-bin-v9-arm/bin/qemu-arm -L /usr/lib/gcc-cross/arm-linux-gnueabi/11/ -L /usr/arm-linux-gnueabi/lib/ ./hello

效果:

5.2 下载编译 Linux kernel

$ wget https://github.com/torvalds/linux/archive/refs/tags/v5.10.tar.gz
$ tar zxf v5.10.tar.gz
$ cd linux-5.10/
./linux-5.10$ cp ../../CA_LAB_AttachedFiles/LAB3/kernel/config-4.14.85-realview-arm1136 ./.config
/linux-5.10$ make ARCH=arm menuconfig<Exit>./linux-5.10$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j//## or seprated steps:
./linux-5.10$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j zImage
./linux-5.10$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm  dtbs

使用了一个非常简单的arm arch 的config 文件:

./linux-5.10$ cp ../../CA_LAB_AttachedFiles/LAB3/kernel/config-4.14.85-realview-arm1136 ./.config

编译结果:

device tree of arm-realview-eb.dtb

5.3 下载编译 busybox

使用 wget 下载,配置方式可以宽松一点,直接 make menuconfig ARCH=arm,然后使用交叉编译器编译

$ wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
$ cd ./busybox-1.35.0/
$ make ARCH=arm menuconfig
<Exit>
<Yes>$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j

编译结果:

$ make install CROSS_COMPILE=arm-linux-gnueabi-
$ ls _install/

5.4 Building Initrd ramdisk

5.4.1 准备文件

cd _install/
cp ../../../CA_LAB_AttachedFiles/LAB3/busybox/etc.tar.gz ./
tar zxf etc.tar.gz
ls etc

将 命令

 $ ../qemu-bin-v9-arm/bin/qemu-arm -L /usr/lib/gcc-cross/arm-linux-gnueabi/11/ -L /usr/arm-linux-gnueabi/lib/ ./hello

中通过 -L 暴露给qemu-arm 的 .so 文件,别忘记 ld-linux.so.3,全部拷贝到 _install/lib/ 中:

$ mkdir lib
$ cp -r /usr/lib/gcc-cross/arm-linux-gnueabi/11/* ./
$ cp -r /usr/arm-linux-gnueabi/lib/* ./
$ cp /usr/arm-linux-gnueabi/lib/ld-linux.so.3 ./

5.4.2 制作 initrd.gz

$ cd ./_install/
$ find . | cpio --create --format=newc > ../initrd
$ gzip -f ../initrd
$ ls ../initrd.gz -all -h

 5.5 QEMU 中启动 Linux

必须的文件:
                 qemu-system-arm,        zImage,     initrd.gz     arm-realview-eb.dtb 

//# qemu-system-arm:
./qemu-bin-v9-arm/bin/qemu-system-arm//# zImage:
./uboot_kernel/linux-5.10/arch/arm/boot/zImage//# Initrd.gz:
./uboot_kernel/busybox-1.35.0/initrd.gz//# Device tree:
./uboot_kernel/linux-5.10/arch/arm/boot/dts/arm-realview-eb.dtb

启动Linux:

../qemu-bin-v9-arm/bin/qemu-system-arm  \
-M realview-eb \
-m 128M \
-cpu arm1136 \
-kernel ../uboot_kernel/linux-5.10/arch/arm/boot/zImage \
-initrd ../uboot_kernel/busybox-1.35.0/initrd.gz \
-nographic -serial mon:stdio \
-dtb ../uboot_kernel/linux-5.10/arch/arm/boot/dts/arm-realview-eb.dtb

保持内存数量为  -m 128M \

文件系统问题,导致出错:

Errors:

再看看。。。

构建qemu和vexpress 板子的仿真环境:

#!/usr/bin/bash
mkdir workspace2
cd workspace2
WORK_DIR=${PWD}
git clone https://github.com/qemu/qemu.git
cd qemu/
git checkout v9.0.0
mkdir ./build_arm/
cd ./build_arm/
../configure --target-list="arm-softmmu,arm-linux-user" --prefix=${WORK_DIR}/qemu-bin-arm/
make -j
make install
cd ../../
sudo ls
sudo apt-get install gcc-arm-linux-gnueabi
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz
tar zxf linux-5.10.tar.gz 
cd linux-5.10/
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j
cd ../
wget https://ftp.denx.de/pub/u-boot/u-boot-2020.10.tar.bz2
tar xf u-boot-2020.10.tar.bz2 
cd u-boot-2020.10/
make vexpress_ca9x4_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- all
cd ../
wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
tar xf busybox-1.36.0.tar.bz2 
cd busybox-1.36.0/
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-
cd ../
mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root,home}
sudo cp busybox-1.36.0/_install/* -r rootfs/
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
sudo mknod rootfs/dev/tty1 c 4 1 && sudo mknod rootfs/dev/tty2 c 4 2 && sudo mknod rootfs/dev/tty3 c 4 3 && sudo mknod rootfs/dev/tty4 c 4 4
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=1024
mkfs.ext3 a9rootfs.ext3
sudo mkdir tmpfs && sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop && sudo cp -r rootfs/*  tmpfs/ && sudo umount tmpfs
${WORK_DIR}/qemu-bin-arm/bin/qemu-system-arm -M vexpress-a9 -m 512M \
-kernel ./linux-5.10/arch/arm/boot/zImage \
-dtb    ./linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

vexpress 平台结构:

从 这份文档中《ARM® CoreTile Express A9×4 Cortex®-A9 MPCore (V2P-CA9) Technical Reference Manual》发现如下内存布局:

添加硬件:

添加 LKM:

添加 app:

重建系统

在qemu中添加硬件,在linux中添加LKM,在用户态添加app后,重新编译整个系统:

update_buildup.sh

#!/usr/bin/bash
#mkdir workspace2
cd workspace2
WORK_DIR=${PWD}
#git clone https://github.com/qemu/qemu.git
cd qemu/
#git checkout v9.0.0
#mkdir build_arm/
cd ../build_arm/
#../configure --target-list="arm-softmmu,arm-linux-user" --prefix=${WORK_DIR}/qemu-bin-arm/
make -j
make install
cd ../
sudo ls
#sudo apt-get install gcc-arm-linux-gnueabi#wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz
#tar zxf linux-5.10.tar.gz 
cd linux-5.10/
#make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j
cd ../#wget https://ftp.denx.de/pub/u-boot/u-boot-2020.10.tar.bz2
#tar xf u-boot-2020.10.tar.bz2 
#cd u-boot-2020.10/
#make vexpress_ca9x4_defconfig
#make CROSS_COMPILE=arm-linux-gnueabi- all
#cd ../#wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
#tar xf busybox-1.36.0.tar.bz2 
#cd busybox-1.36.0/
#make defconfig
#make CROSS_COMPILE=arm-linux-gnueabi-
#make install CROSS_COMPILE=arm-linux-gnueabi-
#cd ../
#mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root,home}
#sudo cp busybox-1.36.0/_install/* -r rootfs/
#sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
#sudo mknod rootfs/dev/tty1 c 4 1 && sudo mknod rootfs/dev/tty2 c 4 2 && sudo mknod rootfs/dev/tty3 c 4 3 && sudo mknod rootfs/dev/tty4 c 4 4
rm a9rootfs.ext3
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=1024
mkfs.ext3 a9rootfs.ext3
sudo mkdir -p tmpfs && sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop && sudo cp -r rootfs/*  tmpfs/ && sudo umount tmpfs${WORK_DIR}/qemu-bin-arm/bin/qemu-system-arm -M vexpress-a9 -m 512M \
-kernel ./linux-5.10/arch/arm/boot/zImage \
-dtb    ./linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

相关文章:

基于 systemc-2.3.1的virtual device 接入 qemu-arm

1&#xff0c;下载systemc-2.3.1 下载网址&#xff1a; SystemC Files $ wget https://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.1.tgz 2&#xff0c;编译安装 systemc-2.3.1 tar zxf systemc-2.3.1.tgz cd systemc-2.3.1/ export CXXg mkdir bu…...

(七)自动化测试

1. 简述什么是UI自动化测试? 正确回答通过率:78.0%[ 详情 ] 推荐指数: ★★★★ 试题难度: 中级 UI自动化测试(User Interface Automation Testing)是一种通过编写脚本或使用自动化测试工具,对用户界面(UI)进行自动化测试的方法。它可以模拟用户与应用程序或网站的交…...

【信创】virtualbox内虚拟机连接U盘 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;【信创】virtualbox内虚拟机连接U盘 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在信创操作系统上使用VirtualBox虚拟机连接物理主机U盘的文章。在使用VirtualBox虚拟机时&#xff0c;有时候需要将物理主机上的…...

【2024】Datawhale AI夏令营 Task4笔记——vllm加速方式修改及llm推理参数调整上分

【2024】Datawhale AI夏令营 Task4笔记——vllm加速方式修改及llm推理参数调整上分 本文承接文章【2024】Datawhale AI夏令营 Task3笔记——Baseline2部分代码解读及初步上分思路&#xff0c;对其中vllm加速方式进行修改&#xff0c;推理速度获得了极大提升。另外&#xff0c;…...

腾讯OCR签名算法

云服务器 签名方法 v3-调用方式-API 中心-腾讯云 一&#xff0c;签名算法-官网 copy官网 package com.smcv.customer.service.util;import org.springframework.http.HttpHeaders;import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.D…...

CTFHUB-SSRF-DNS重绑定 Bypass

开启题目&#xff0c;页面空白&#xff0c;访问附件 附件是一个知乎的文章&#xff0c;翻到下面点击文中这个链接 跳转之后&#xff0c;进行设置 把得到的链接拼接到题目的后面进行访问&#xff0c;然后得到了本题的 flag...

【oracle】数据库基本使用

一、oracle数据库简介 Oracle 数据库&#xff0c;亦称 Oracle RDBMS&#xff0c;或简称 Oracle&#xff0c;是一款由甲骨文公司推出的高效、稳定且广泛应用的关系型数据库管理系统。该数据库系统不仅在数据管理领域处于领先地位&#xff0c;而且由于其良好的可移植性、易用性和…...

Action部署在线上写文章

原文&#xff1a;https://blog.c12th.cn/archives/32.html 前言 之前分别出了 Hexo 和 Hugo 的 Action搭建教程&#xff0c;相当于伪动态&#xff0c;可以在线上写文章了&#xff1b;不过对于喜欢魔改的同学就不太友好了qwq 教程 github.dev 确保在配置过程中能访问Github &…...

CC链 (Commons Collections)

目录 前置知识 CC链: https://mvnrepository.com/ CC链 CC链 Commons Collections --apache组织发布的开源库 里面主要对集合的增强以及扩展类 被广泛使用 组件,HashMap HashTable ArrayList总结CC链: 就是有反序列化入口&#xff0c;同时有cc库的情况下&#xff0c…...

左手坐标系、右手坐标系、坐标轴方向

一、右手坐标系 1、y轴朝上&#xff1a;webgl、Threejs、Unity、Unreal、Maya、3D Builder x&#xff1a;向右y&#xff1a;向上z&#xff1a;向前&#xff08;朝向观察者、指向屏幕外&#xff09; 2、z轴朝上&#xff1a;cesium、blender x&#xff1a;向右y&#xff1a;向前…...

芋道源码yudao-cloud 二开日记(商品sku数据归类为规格属性)

商品的每一条规格和属性在数据库里都是单一的一条数据&#xff0c;从数据库里查出来后&#xff0c;该怎么归类为对应的规格和属性值&#xff1f;如下图&#xff1a; 在商城模块&#xff0c;商品的单规格、多规格、单属性、多属性功能可以说是非常完整&#xff0c;如下图&#x…...

自媒体新闻资讯类网站模板/EyouCMS自媒体资讯类网站模板

自媒体新闻资讯类网站模板&#xff0c;EyouCMS自媒体资讯类网站模板。模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&#xff0c;完美兼容IE7、Firefox、Chrome、360浏览器等&#xff1b;主流浏览器&#xff1b;结构容易优化&#x…...

Python3 第六十课 -- 实例二十九

目录 一. 冒泡排序 二. 归并排序 一. 冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再…...

【JAVA入门】Day17 - GUI

【JAVA入门】Day17 - GUI 文章目录 【JAVA入门】Day17 - GUI一、组件二、事件 GUI 即图形化界面。 一、组件 一个 Java 的图形化界面项目主要用到了下面几种组件。 Java 中最外层的窗体叫做 JFrame。Java 中最上层的菜单叫做 JMenuBar。Java 中管理文字和图片的容器叫做 JLab…...

OpenAI API continuing conversation in a dialogue

题意&#xff1a;在对话中继续使用OpenAI API进行对话 问题背景&#xff1a; I am playing around with the openAI API and I am trying to continue a conversation. For example: 我正在尝试使用OpenAI API&#xff0c;并试图继续一段对话。例如&#xff1a; import open…...

6.前端怎么做一个验证码和JWT,使用mockjs模拟后端

流程图 创建一个发起请求 创建一个方法 getCaptchaImg() {this.$axios.get(/captcha).then(res > {console.log(res);this.loginForm.token res.data.data.tokenthis.captchaImg res.data.data.captchaImgconsole.log(this.captchaImg)})}, captchaImg: "", 创…...

Python酷库之旅-第三方库Pandas(064)

目录 一、用法精讲 251、pandas.Series.tz_localize方法 251-1、语法 251-2、参数 251-3、功能 251-4、返回值 251-5、说明 251-6、用法 251-6-1、数据准备 251-6-2、代码示例 251-6-3、结果输出 252、pandas.Series.at_time方法 252-1、语法 252-2、参数 252-3…...

MATLAB基础操作(二)

11.求方程2x^5-3x^371x^2-9x130的全部跟 >> p[2,0,-3,71,-9,13]; >> xroots(p); 12.求解线性方程组2x3y-z2 8x2y3z4 45x3y9z23 >> a[2,3,-1;8,2,3;45,3,9];%建立系数矩阵a >> b[2,4,23]%建立列向量b >> …...

win10 繁体简体字切换

1. 使用快捷键 Ctrl Shift F 2. 在语言设置中更改 | 点击任务栏上的“开始”按钮。 | 选择“设置”&#xff08;齿轮图标&#xff09;。 | 在弹出的“Windows 设置”窗口中&#xff0c;点击“时间和语言”。 | 选择“语言”选项。 | 在右侧找到您正在使用的输入法&#xff…...

R语言统计分析——描述性统计

参考资料&#xff1a;R语言实战【第2版】 1、整体统计 对于R语言基础安装&#xff0c;可以使用summary()函数来获取描述性统计量。summary()函数提供了最小值、最大值、四分位数、中位数和算术平均数&#xff0c;以及因子向量和逻辑向量的频数统计。 myvars<-c("mpg&…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...