QEMU 实验(四): libdrm 移植

2022-07-11  本文已影响0人  wjundong

libdrm 编译

参考

cd $LFS/src
wget https://dri.freedesktop.org/libdrm/libdrm-2.4.112.tar.xz
tar -xvf libdrm-2.4.112.tar.xz
cd libdrm-2.4.112

# 创建 cross_file.txt 用于配置交叉编译环境, 文件内容见下文
vim cross_file.txt

meson build \
    --prefix=$LFS/rootfs \
      --cross-file=cross_file.txt \
      -D amdgpu=false \
      -D cairo-tests=false \
      -D etnaviv=false \
      -D exynos=true \
      -D freedreno=false \
      -D freedreno-kgsl=false \
      -D install-test-programs=true \
      -D intel=false \
      -D libkms=false \
      -D man-pages=false \
      -D nouveau=false \
      -D omap=false \
      -D radeon=false \
      -D tegra=false \
      -D udev=false \
      -D valgrind=false \
      -D vc4=false \
      -D vmwgfx=false
 
cd build
ninja && ninja install

cross_file.txt 文件内容

[binaries]
c = 'arm-linux-gnueabi-gcc'
cpp = 'arm-linux-gnueabi-gcc'
ar = 'arm-linux-gnueabi-ar'
strip = 'arm-linux-gnueabi-strip'

[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'armv7'
endian = 'little'

[build_machine]
system = 'linux'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

更新系统镜像

sudo mount -o loop $LFS/dst/rootfs.img /mnt
sudo cp $LFS/rootfs/* /mnt -r
sudo umount /mnt

加载系统 (去掉 -nographic)

qemu-system-arm                                         \
    -M vexpress-a9                                  \
    -m 512M                                         \
    -kernel $LFS/dst/zImage                         \
    -dtb $LFS/dst/vexpress-v2p-ca9.dtb              \
    -sd $LFS/dst/rootfs.img                         \
    -append "root=/dev/mmcblk0 rw console=ttyAMA0"

执行测试

执行测试前首先查看程序需要依赖哪些库, 必须保证根文件系统的动态库中包含它们

$ readelf -d $LFS/rootfs/bin/modetest | grep 'NEEDED'
  0x00000001 (NEEDED)                     共享库:[libdrm.so.2]
  0x00000001 (NEEDED)                     共享库:[libpthread.so.0]
  0x00000001 (NEEDED)                     共享库:[libc.so.6]
  0x00000001 (NEEDED)                     共享库:[ld-linux.so.3]

首先执行 modetest 可以看到 modetest 试图枚举所有可能的图形卡, 然后最终找到 pl111 是可工作的, 这是因为 vexpress-v2p-ca9 的 gpu 是 pl111

# 通过 --help 获得帮助
modetest --help
# 可知执行测试程序的格式, 由此执行如下测试
modetest -M pl111 -s 34@32:1024x768

执行后在 QEMU View 菜单里面切换到 pl111 界面, 可以看到显示如下, 说明测试成功, 设备正常运行:

image.png
上一篇下一篇

猜你喜欢

热点阅读