当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入解析 KMZ 文件的处理与可视化:从数据提取到地图展示项目实战
  • 计算几何 点乘 两点间距离 两向量夹角
  • C++ STL copy_backward, move_backward 用法
  • B3952 [GESP202403 一级] 小杨买书
  • python实现图像分割算法4
  • AI人工智能开发环境配置
  • 【人工智能】NLP入门指南:自然语言处理基础全解析
  • 计算机毕业设计选题推荐-学生作业管理系统-Java/Python项目实战
  • 工作纪实54-git使用ssh方式
  • 【第一章】软件测试人员的成长技能树:打造全方位的技能体系
  • PHP 表单处理基础
  • NVIDIA A100 和 H100 硬件架构学习
  • springboot集成RabbitMQ
  • 16进制转换-系统架构师(三十九)
  • 2023 RoboCom CAIP本科组决赛-RC-u3 兰州拉面派餐系统
  • [NodeJS] 关于Buffer
  • Create React App 使用
  • HTML5新特性总结
  • java8 Stream Pipelines 浅析
  • javascript 哈希表
  • Java教程_软件开发基础
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • springboot_database项目介绍
  • text-decoration与color属性
  • Vue全家桶实现一个Web App
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • - 概述 - 《设计模式(极简c++版)》
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 每天一个设计模式之命令模式
  • 用Visual Studio开发以太坊智能合约
  • 源码安装memcached和php memcache扩展
  • 积累各种好的链接
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​什么是bug?bug的源头在哪里?
  • # 计算机视觉入门
  • #Ubuntu(修改root信息)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • ()、[]、{}、(())、[[]]命令替换
  • (23)Linux的软硬连接
  • (33)STM32——485实验笔记
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (黑马C++)L06 重载与继承
  • (六)Flink 窗口计算
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • . Flume面试题
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET CORE Aws S3 使用