spi-lcd-st7789-驱动开发-综合开发framebuf实时显示摄像头(5)

本文详细介绍了如何在IMX6ULL平台编译并使用SPI-LCD7789驱动,包括驱动模块和测试程序的编译步骤,libjpeg-turbo的集成,以及framebuf和摄像头实时显示的测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这节主要讲解下综合例程,包括代码编译,使用。

1.驱动和测试例程的编译

驱动和测试程序使用同一Makefile编译,Makefile如下,自己编译的使用只要修改如下2处就可以了:

1. KERN_DIR=/ext_hdd/Public/local_100ask_imx6ull_sdk/Linux-4.9.88 修改为自己的内核目录

2. CC = arm-linux-gnueabihf-gcc 修改为自己的工具链

KERN_DIR=/ext_hdd/Public/local_100ask_imx6ull_sdk/Linux-4.9.88
CUR_DIR=`pwd`
OUT_PUT_DIR=$(CUR_DIR)/output

#obj-m += spi_lcd_st7789.o
obj-m := lcd_st7789.o       
lcd_st7789-objs := lcd_st7789_fb.o spi_lcd_st7789_lowlevel.o spi_lcd_st7789.o

test_app_name = test_spi_lcd_st7789
test_app_name_2 = test_spi_lcd_st7789_2
test_app_name_3 = test_spi_lcd_st7789_3
test_app_name_jpeg = test_spi_lcd_st7789_jpeg
tets_app_src = test_spi_lcd_st7789.c
tets_app_src_2 = test_spi_lcd_st7789_2.c
tets_app_src_3 = test_spi_lcd_st7789_3.c
tets_app_src_jpeg = test_spi_lcd_st7789_jpeg.c
CC = arm-linux-gnueabihf-gcc
INC_PATH +=
LOCAL_CFLAGS += -Wall
LDFLAGS += -pthread

all:
	@ if [ ! -d ${OUT_PUT_DIR}  ]; then  mkdir -p ${OUT_PUT_DIR}; fi
	make -C $(KERN_DIR) M=$(CUR_DIR) modules V=1
	$(CC) $(INC_PATH) $(LOCAL_CFLAGS) $(LDFLAGS) $(tets_app_src)  -o $(test_app_name) 
	$(CC) $(INC_PATH) $(LOCAL_CFLAGS) $(LDFLAGS) $(tets_app_src_2)  -o $(test_app_name_2)
	$(CC) $(INC_PATH) $(LOCAL_CFLAGS) $(LDFLAGS) $(tets_app_src_3)  -o $(test_app_name_3)  
	$(CC) $(INC_PATH) $(LOCAL_CFLAGS) $(LDFLAGS) $(tets_app_src_jpeg)  -o $(test_app_name_jpeg)  
	mv *.ko *.o  $(test_app_name) $(test_app_name_2) $(test_app_name_3) $(test_app_name_jpeg) ${OUT_PUT_DIR}
	cp  ${OUT_PUT_DIR}/* ${sh_dir}


.PHONY:clean
clean:
	make  -C $(KERN_DIR) M=$(CUR_DIR)  modules clean
	rm ${OUT_PUT_DIR}/*

执行完make后,output目录会有lcd_st7789.ko   test_spi_lcd_st7789   test_spi_lcd_st7789_jpeg

lcd_st7789.ko   驱动模块

test_spi_lcd_st7789  测试framebuf的可执行文件

 test_spi_lcd_st7789_jpeg 综合测试可执行文件

注意 test_spi_lcd_st7789_jpeg.c的一些定义 可能要根据自己使用摄像头参数修改:

#define VIDEO_WIDTH  320 //摄像头支持的分辨率宽度
#define VIDEO_HEIGHT 240 //摄像头支持的分辨率高度
#define VIDEO_PIXEL_FORMAT V4L2_PIX_FMT_JPEG //摄像头支持的视频数据格式

如果改了摄像头分辨率,数据处理线程也要修改才能正常显示数据

 

2.libjpeg-turbo 编译

代码:

https://gitee.com/wllw7176/self_100ask_imx6ull/tree/master/self_dir/third_part/libjpeg-turbo-1.5.3

进入目录修改my_build.sh,修改红色部分为自己使用工具链的前缀

prefix_dir=${PWD}/build
if [ ! -e ${prefix_dir}  ];then
mkdir -p ${prefix_dir}
fi
./configure --host=arm-linux-gnueabihf --prefix=${prefix_dir} 
make -j8
make install
make clean
echo "===================================="
echo "Build file in ${prefix_dir}"
echo "===================================="
执行my_build.sh

将编译产生的build/lib/libturbojpeg.so.* 复制到开发板的/usr/lib

将编译产生的build/bin/djpeg 复制到 test_spi_lcd_st7789_jpeg 所在目录

3. 测试方法

3.1 framebuf测试


#insmod lcd_st7789.ko use_dma_flag=1
...
[  261.245332] fb2: spi_lcd_st7789 frame buffer device, using 112K of video memory

#./test_spi_lcd_st7789 /dev/fb2
一切ok,log输出:
The phy mem = 0xa0b5d000, total size = 115200(byte)
xres =  240, yres =  240, bits_per_pixel = 16
So the screensize = 115200(byte), using 1 frame
vinfo.xoffset = 0, vinfo.yoffset = 0
vinfo.vmode is :0
finfo.ypanstep is :1
vinfo.red.offset=0x0
vinfo.red.length=0x5
vinfo.green.offset=0x5
vinfo.green.length=0x6
vinfo.blue.offset=0xb
vinfo.blue.length=0x5
vinfo.transp.offset=0x0
vinfo.transp.length=0x0
Get virt mem = 0x76e16000
Test FBIOPAN_DISPLAY...
Test drawing RED......
data 0x000000f8
Test drawing GREEN......
data 0xffffe007
Test drawing BLUE......
data 0x00001f00
Test drawing WHITE......
data 0xffffffff
Test drawing Black......
data 0x00000000
Test write......

lcd对应frambuf编号在插入模块的时候可以看出来,如果没有错误,lcd会依次显示红绿蓝白黑各种颜色

3.2 综合测试将usb摄像头的数据,通过frambuf,实时显示在lcd上

#./test_spi_lcd_st7789_jpeg /dev/fb2 /dev/video0
一切ok,log输出:
FbInfo:
         The phy mem = 0xa0b5d000, total size = 115200(unsigned char)
         xres =  240, yres =  240, bits_per_pixel = 16
         So the screensize = 115200(unsigned char), using 1 frame
         vinfo.xoffset = 0, vinfo.yoffset = 0
         vinfo.vmode is :0
         finfo.ypanstep is :1
         vinfo.red.offset=0x0
         vinfo.red.length=0x5
         vinfo.green.offset=0x5
         vinfo.green.length=0x6
         vinfo.blue.offset=0xb
         vinfo.blue.length=0x5
         vinfo.transp.offset=0x0
         vinfo.transp.length=0x0

CameravCapabilityInfo:
        driver:uvcvideo
        card:PC Camera
        bus_info:usb-ci_hdrc.1-1.3
        version:264536
        capabilities:84200001
        Camera supports capture.
        Camera supports streaming.

Camera Support video formats:
        1.Motion-JPEG
        2.YUYV 4:2:2

V4l2FmtInfo:
         fmt.type:              1
         pix.pixelformat:       MJPG
         pix.width:             320
         pix.height:            240
         pix.field:             1

V4l2 buf info:
        Buf count:16
        index:0 map_address:0x76dbc000 length:230400
        index:1 map_address:0x76d83000 length:230400
        index:2 map_address:0x76d4a000 length:230400
        index:3 map_address:0x76d11000 length:230400
        index:4 map_address:0x76cd8000 length:230400
        index:5 map_address:0x76c9f000 length:230400
        index:6 map_address:0x76c66000 length:230400
        index:7 map_address:0x76c2d000 length:230400
        index:8 map_address:0x76bf4000 length:230400
        index:9 map_address:0x76bbb000 length:230400
        index:10 map_address:0x76b82000 length:230400
        index:11 map_address:0x76b49000 length:230400
        index:12 map_address:0x76b10000 length:230400
        index:13 map_address:0x76ad7000 length:230400
        index:14 map_address:0x76a9e000 length:230400
        index:15 map_address:0x76a65000 length:230400

---->[app_init:553] start_capture ok!!!

/dev/video0 节点为插入usb摄像头系统自动创建的devj如果没有错误,lcd会在lcd中间位置实时显示摄像头画面。

spi-lcd7789 imx6ull测试视频

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值