Buildroot 移植 freetype 到 Jz2440

2024-01-24 01:30

本文主要是介绍Buildroot 移植 freetype 到 Jz2440,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文是在Buildroot 构建根文件系统(Jz2440)的基础上添加 freetype 第三方软件库,以便在 Jz2440 开发板LCD使用 freetype 显示文字。

第 1 步: 在 buildroot 顶层目录输入 make menuconfig 命令,进入配置界面,配置如下:

Target packages->Libraries->Graphics->[*] freetype

第2步:输入 make 继续编译 buildroot(一次编译成功)(注:buildroot 自动下载的 freetype 版本为 freetype-2.10.4.tar.xz)

第3步:把 buildroot-2020.02.9/output/images 目录下的 rootfs.tar 拷贝到 nfs 网络文件系统,通过 nfs 方式挂载进行测试:

cp rootfs.tar ~/works/nfs/rootfs
cd ~/works/nfs/rootfs
tar xf rootfs.tar
rm -rf rootfs.tar

第 4 步:重启开发板,挂载新的文件系统,文件系统挂成功后,搜索 freetype 相关的文件,结果如下图所示:
在这里插入图片描述
由上图可知,已把 freetype 相关的动态库添加到了根文件系统的 /usr/lib 目录。

第 5 步:很多时候,我们编译自己的应用程序时,都是使用系统的检查编译器的,所以我们需要将 buildroot 编译处理的 freetype 相关的头文件和动态库文件复制到系统的编译器目录下:
(1) 在 buildroot 目录搜索 freetype 相关的头文件:

find -name "freetype*"

搜索结果如下图所示:
在这里插入图片描述
继续输入如下命令,查看 freetype2 还有那些文件:

ls ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/freetype2/*

结果显示如下:
在这里插入图片描述
可见,freetype2 目录还有 ft2build.h 头文件,freetype 目录下还有其他很多的头文件。因此,我们可以直接把 freetype2 整个目录复制打 arm-linux-gcc 交叉编译的 /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include 目录:

cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/freetype2 /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include -rf

然后,跳转到 /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include 目录,把 freetype2 目录的 ft2build.h 头文件 和 freetype 移动到当前的 include 目录下,否则,编译应用程序时会出现错误:error: ft2build.h: No such file or directory

cd /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include
sudo mv freetype2/ft2build.h  .
sudo mv freetype2/freetype .
sudo rm -rf freetype2

(2) 在 buildroot 目录搜索 freetype 相关的动态库文件:

find -name "*freetype*so*"

搜索结果如下图所示:
在这里插入图片描述
可以见,freetype 相关的动态库有上图红色框的这三个。我们把它们复制到 arm-linux-gcc 交叉编译的 /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib 目录下:

sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libfreetype*so* /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib -rfd

头文件和库文件都复制完毕了,我们尝试重新编译程序,出现了如下错误:warning: libz.so.1,导致编译失败。

/tools/arm-linux-gcc-4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: libz.so.1, needed by /tools/arm-linux-gcc-4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/lib/libfreetype.so, not found (try using -rpath or -rpath-link)

libz.so.1 看文件的格式,应该是一个动态库,接下来我们回到 buildroot 目录搜索该文件:

find -name "libz.so.1"

搜索结果如下:
在这里插入图片描述
使用 flie 命令查看一下该文件,发现这只是一个链接文件,真正的库文件是 libz.so.1.2.11
在这里插入图片描述
因为我们需要把这两个文件也拷贝到交叉编译器的 lib 目录:

sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libz.so* /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib -rfd

重新编译 freetype 相关的应用程序,编译成功。
注:关于 buildroot 下的 host 目录的作用,可以查看:https://blog.csdn.net/kunkliu/article/details/84297260; 关于添加 freetype 相关的头文件和库到交叉编译器可以查看:https://blog.csdn.net/qq_35031421/article/details/107970711的 “3. 在JZ2440开发板LCD显示矢量字体” 章节。

第 6 步:使用 数码相框(五、使用freetype库在LCD显示几行文字)里的程序进行测试,把编译好的测试程序拷贝到开发板的根文件系统,执行 ./show_more_lines simsun.ttc 命令(注:如果没有安装LCD驱动,需要提前安装好LCD驱动)显示结果如下:
在这里插入图片描述
可以,使用 buildroot 交叉编译移植 freetype 成功。

这篇关于Buildroot 移植 freetype 到 Jz2440的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638140

相关文章

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

arm linux lua移植

lua: lua home 1.下载lua源码 lua下载 lua-5.3.4.tar.gz 2.解压: tar xvf lua-5.3.4.tar.gz 3.修改makefile and luaconf.h $修改 lua-5.3.4/Makefile #INSTALL_TOP= /usr/local INSTALL_TOP= $(shell pwd)/out #修改安装目录(当前目录/o

s3c2440---PWM使用之蜂鸣器驱动移植

一、蜂鸣器驱动介绍 1.1.什么是蜂鸣器               蜂鸣器是一种简单的声响发生器,常用于电子产品中作为警示或提醒作用。其基本原理是通过交替改变直流电的电压方向来产生声音,一般使用交替电流产生声音会比较稳定。 1.2.蜂鸣器的类别 1.有源蜂鸣器 1)结构原理 有源蜂鸣器内部自带振荡源,只需接通电源即可发声。内部电路会自动产生一定频率的振荡信号,从而驱动蜂鸣器发声。

【GD32】---- 移植工程模板及点灯测试

1 新建模板文件夹 新建一个名叫03_GD32TemplateProject的文件夹,用于建造工程模板 2 移植官方库文件 在模板文件夹里新建5个文件夹,分别存放官方库文件和系统驱动文件 01_main 存放main函数 02_Startup 存放系统启动文件 03_System 存放官方的系统文件 04_Firmware_PeripheralDriver 存放官方

[rk3588 ubuntu20.04]移植ROS2

目录 1 使用命令行安装ROS2 1.1设置语言 1.2添加源 1.3安装ROS2 1.4设置环境变量 2 在编译源码阶段安装ROS2 2.1调整roofts.img大小 2.2 安装ROS2 3 ROS2功能测试 1 使用命令行安装ROS2 1.1设置语言         设置语言为UTF-8。 sudo apt update && sudo apt insta

让linux下无线网卡变身随身wifi----hostapd移植-Nazgul

有了前面的检测,确定了我们的网卡是能够拥有热点共享功能的,但是如何让它共享出来呢? 于是有了这篇文章的诞生,hostapd移植 hostapd    可以让我们的网线网卡变成热点 1、下载     git clone git://w1.fi/srv/git/hostap.git   得到hostap目录,但是里面wpa_supplicant and hostapd的结合在

让linux下无线网卡变身随身wifi----前言--iw移植-Nazgul

最痛苦的事莫过于--上班 最最痛苦的事莫过于--上班有网不能上 最最最痛苦的事莫过于--上班有网能上却没有wifi 最最最最痛苦的事莫过于--你有无线网卡却没有U口可插 最最最最最痛苦的事莫过于--有U口插却发现U口只在开发板上 最最最最最最痛苦的事莫过于--开发板上有u口但是跑的是linux 最最最最最最最痛苦的事莫过于--linux能驱动网卡,但是如何共享出wifi来啊 于是,,,

buildroot构建根文件系统

目录 嵌入式系统1. Bootloader(引导程序,如U-Boot)2. Linux内核3. 根文件系统 根文件系统使用buildroot编译文件系统Buildroot目录简介选择配置文件Buildroot其他分析 嵌入式系统 嵌入式系统的三大部分:bootloader(如U-Boot)、Linux内核和根文件系统,各自有其特定的作用和功能。以下是对这三部分的详细说明: 1