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

news2024/9/23 1:24:44


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++11


SYSTEMC_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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PS 2024 百种常用插件下载安装教程【免费使用,先到先得】

文章目录 软件介绍软件下载安装步骤 专栏推荐&#xff1a; 超多精品软件&#xff08;持续更新中…&#xff09; 软件推荐&#xff1a; PS 2024 PR 2024 软件介绍 PS常用插件 此软件整合了市面近百款ps处理插件&#xff0c;可实现&#xff1a;一键制作背景&#xff0c;一键抠图…

linux安装docker(实操教程)

一、安装前准备工作 1.查看服务器操作系统版本 2.查看服务器的操作系统内核版本 3.安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2如果不是root用户登陆的系统&#xff0c;需要手动输入sudo -i切换到root帐户 4.设置阿里云docker-ce镜像源 yum-c…

美国失业率大幅上升,增加九月份降息利率的可能性

令人失望的是&#xff0c;美国7月份经济增加了11.4万个工作岗位&#xff0c;低于预期的17.5万个和6月的17.9万个。平均小时工资持续下降&#xff0c;但失业率升至4.3%。美元继续走低&#xff0c;美国国债也在下跌&#xff0c;而黄金则获得了提振。 7月份的非农业支付数据令人失…

ST语言支持包下载安装(VS CODE)

VSCODE是微软提供的代码编辑器&#xff0c;支持非常多的语言。 1、VSCODE下载 2、ST语言支持包 3、ST语言支持包下载 4、ST语言 。。

IndentationError: expected an indented block 深度解析

IndentationError: expected an indented block 深度解析与实战指南 在Python编程中&#xff0c;IndentationError: expected an indented block是一个常见的错误&#xff0c;通常发生在代码块没有正确缩进时。这个错误表明代码中存在格式问题&#xff0c;可能是缩进不一致或缺…

基于PFC和ECN搭建无损RoCE网络的工作流程分析

无损RoCE网络概念 RDMA&#xff08;Remote Direct Memory Access&#xff0c;远程直接内存访问&#xff09;是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。RDMA 将用户应用中的数据直接传入服务器的存储区&#xff0c;通过网络将数据从一个系统快速传输到远程系…

力扣421.数组中两个数的最大异或和

力扣421.数组中两个数的最大异或和 __builtin_clz()&#xff1a;求出mx二进制最高位之后的0的个数 class Solution {public:int findMaximumXOR(vector<int>& nums) {int mx *max_element(nums.begin(),nums.end());//__builtin_clz函数int high_bit mx ? 31 -…

单元测试JUnit

前言&#x1f440;~ 上一章我们介绍了自动化测试工具Selenium&#xff0c;今天讲解单元测试工具JUnit JUnit JUnit的使用 JUnit注解 BeforeAll和AfterAll注解 BeforeEach和AfterEach注解 参数化 方法获取参数&#xff08;动态参数&#xff09; 断言 用例执行顺序 测…

詹妮弗洛佩兹度过一个单身的季节!知情人:双方无法达成妥协,可能几日内将递交离婚申请!

对于詹妮弗洛佩兹来说&#xff0c;这是一个单身的季节&#xff0c;但这似乎并不是她希望从分居的丈夫本阿弗莱克那里得到的。当她在东海岸的汉普顿度过夏天时&#xff0c;这位 51 岁的演员正忙着在西海岸购买价值 2050 万美元的房产。洛佩兹显然认为&#xff0c;尽管他们已经分…

常见的CMS漏洞解析!

PhPMyadmin&#xff1a; 姿势⼀&#xff1a;通过日志文件拿Shell 利用mysql日志文件写shell&#xff0c;这个日志可以在mysql里改变它的存放位置&#xff0c;登录phpmyadmin可以修改 这个存放位置&#xff0c;并且可以修改它的后缀名。所以可以修改成php的后缀名就能获取⼀个…

通讯协议原始指令日志Python脚本分析

一.通讯协议格式&#xff1a; 二.通讯协议原始日志 [2024-04-18 14:58:59.659 D] 99 99 0E 00 01 0A 04 00 01 00 00 00 1E FN FN [2024-04-18 14:58:59.959 D] 99 99 0E 00 01 0C 03 03 01 00 BC FN FN 三.通讯协议原始指令日志Python脚本分析&#xff08;仅解析指令的PC版和…

反制攻击者-蚁剑低版本

目录 安装 攻击者获取防守方的权限 防守方反制攻击者 防守方获取攻击者的shell权限 安装 安装蚁剑2.0.7版本 链接&#xff1a;https://pan.baidu.com/s/1t40UxkZ2XuSWG6VCdGzvDw?pwd8888 提取码&#xff1a;8888 下载好后先打开Loader文件夹下的.exe文件&#xff0c;打…

常见cms漏洞之dedecms

DedeCMS是织梦团队开发PHP 网站管理系统&#xff0c;它以简单、易用、高效为特色&#xff0c;组建出各种各样各具特色的网站&#xff0c;如地方门户、行业门户、政府及企事业站点等。 下载地址请网上自行寻找 搭建方式选择php study 首先搭建环境 #前台http://localhost/dedecm…

医院患者押金原路退回系统源码,一键操作秒到账,无需设备收银设备 押金+身份证+电子押金单 解决方案

科技之力赋能医院押金原路退回&#xff0c;安全可靠账目清晰 一、医院押金管理必要性 以下是一些可用于销售软件、突出医院管理方便的优点总结&#xff1a; 1. 高效便捷的押金原路退回流程&#xff1a;利用科技之力&#xff0c;简化操作&#xff0c;节省时间和人力成本&#…

使用WPF调用Python进行图像灰度处理

1. 前言 在本文中&#xff0c;我们将通过WPF应用程序调用Python脚本进行图像灰度处理。我们将使用Python的OpenCV库来处理图像&#xff0c;并将其转换为灰度图像&#xff0c;然后通过WPF界面来启动Python进程并展示结果。 2. 准备工作 在开始之前&#xff0c;请确保系统已经…

PDF隐写思路

文章目录 使用工具技术细节小结 使用工具 工具&#xff1a;WPS、010Editor、WbStego 技术细节 步骤&#xff1a; 使用 WPS 查看文件&#xff0c;看是否能打开。 若不能打开则使用 010Editor 查看是否少了头文件等。 正常的 PDF 缺少头文件的 PDF 如果缺少头文件则使用 010…

【初阶数据结构题目】9. 链表分割

链表分割 点击链接做题 例如&#xff1a; 排序前&#xff1a;1->6->2->3->5 X&#xff1a;X 3 排序后&#xff1a;1->2->6->3->5 思路&#xff1a; 排序前&#xff1a;1->6->2->3->5 小链表&#xff1a;malloc->1->2 大链表&#…

一文看懂STL标准模板中的set用法(C++)详细源码与例题

在 C 中&#xff0c;集合通常指的是标准模板库&#xff08;STL&#xff09;中的 std::set 或 std::unordered_set。这两个都是用来存储不重复元素的容器&#xff0c;但在实现和使用方式上有一些区别。 集合&#xff08;set&#xff09;是一个内部自动有序且不含重复元素的容器…

C++的STL简介(三)

目录 1.vector的模拟实现 1.1begin&#xff08;&#xff09; 1.2end&#xff08;&#xff09; 1.3打印信息 1.4 reserve&#xff08;&#xff09; 1.5 size&#xff08;&#xff09; 1.6 capacity&#xff08;&#xff09; 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…

扑克游戏(函数规范化,拆分事件)

前言&#xff1a; 题目链接 进入链接后&#xff0c;点击实践项目&#xff0c;以下两道题分别为6.8.15和6.8.16, 这两道题算不上难&#xff0c;特别是第二道在之前某个比赛中遇到过一次&#xff0c;当时没做出来&#xff0c;想着去找的&#xff0c;没找着&#xff0c;现在又看…