本文是在Buildroot 构建根文件系统(Jz2440)的基础上添加 libjpeg 第三方库,以支持应用程序在 Jz2440 的 LCD 上显示 jpg 格式的图片。
第 1 步: 在 buildroot 顶层目录输入 make menuconfig 命令,进入配置界面,配置如下:
Target packages
->Libraries
->Graphics
->[*] jpeg support
->jpeg variant (jpeg-turbo)
第 2 步:输入 make 继续编译 buildroot (注:buildroot 自动下载的 libjpeg 版本为 libjpeg-turbo-2.0.6.tar.gz),这里一次性编译成功;
第 3 步:复制 libjpeg 相关的库文件和头文件到系统交叉编译工具链(因为这里使用系统交叉编译工具来编译应用程序):
(1) 复制 libjpeg 相关的库文件到系统交叉编译工具链:
- ① 在 buildroot 目录下搜索库文件:
find -name "*jpeg*so*"
,搜索结果如下图所示:
- ② 这里我们把 output/host/arm-buildroot-linux-gnueabi/sysroot/usr/lib/ 目录下的 jpeg 库拷贝到 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/*jpeg*so* /tools/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib -rfd
(2) 复制 libjpeg 相关的头文件到系统交叉编译工具链:
- ① 在 buildroot 目录下搜索头文件:
find -name "*jpeg*.h"
,搜索结果图下图所示:
- ② 以上搜索到的头文件可能不全,根据自己编写应用程序和编译时产生的错误还需要 setjmp.h、jerror.h、jconfig.h 这三个头文件(注: 缺少 jconfig.h 头文件,会产生错误:
error: 'JPEG_LIB_VERSION' undeclared (first use in this function)
,通过在buildroot 目录下搜索JPEG_LIB_VERSION
发现它在 jconfig.h 定义),搜索这个三个文件,搜索结果如下:
- ③ 复制上面的头文件到 arm-linux-gcc 交叉编译的 /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include 目录:
sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/*jpeg*.h /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/setjmp.h /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/jerror.h /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include sudo cp ./output/host/arm-buildroot-linux-gnueabi/sysroot/usr/include/jconfig.h /tools/arm-linux-gcc-4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/include
第 4 步:复制相关的库文件到开发板的文件系统:
- ① 我们可以把上面的库文件直接复制到开发板的文件系统中,也可以在 buildroot 的输出镜像目录中找到 rootfs.tar,解压后然后搜索 jpeg 库:
find -name "*jpeg*so*"
,搜索结果如下:
- ② 把上图的库文件拷贝到网络文件系统:
cp ./usr/lib/*jpeg*so* ~/works/nfs/libjpeg/ -rfd
- ③ 开发板挂载网络文件系统后,再把库文件拷贝到开发板根文件系统的
/usr/lib/
目录下:
到此,交叉编译的关于 jpg 格式图片的应用程序就可以在 Jz2440 开发板运行了。注:编译时要添加编译参数 -ljpeg。cp /mnt/libjpeg/*jpeg*so* /usr/lib/ -rfd