美文网首页
QEMU 实验(四): libdrm 移植

QEMU 实验(四): libdrm 移植

作者: wjundong | 来源:发表于2022-07-11 23:45 被阅读0次

    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

    相关文章

      网友评论

          本文标题:QEMU 实验(四): libdrm 移植

          本文链接:https://www.haomeiwen.com/subject/iseobrtx.html