@jr_online
前面那个命令是手动把usb otg 切换到device状态。
后面那个你用 gcc静态链接应该就没问题了,命令行加 -static
@jr_online
前面那个命令是手动把usb otg 切换到device状态。
后面那个你用 gcc静态链接应该就没问题了,命令行加 -static
@shz18877605430
可能测试没有覆盖到这个flash,如果您只要烧前面16M的话,可以直接改一下这个程序代码,添加flash id即可。
虚拟机whycan用户密码: whycan
调试 fb 版本 lvgl8 先执行:
sudo chmod 777 /dev/fb0 /dev/input/event*
切换到Framebuffer:
CTRL + ALT + F1
切换到UI:
CTRL + ALT + F7
Ubuntu16.04 LVGL8 framebuffer & sdl2 开发/调试
虚拟机百度云盘下载:https://pan.baidu.com/s/1gOk2NCm7TuSZxzIy9mFtAg?pwd=awol
@jacky502
也不一定不能用,看起来只是加载固件没过,看下 eventX 设备没有生成,然后用 getevent 或者 evtest 测试。
如果还是不行,联系供应商要驱动文件吧。
@wxid_disxysjskla
可以的,grep一下代码,暴力一点就直接注释起来。
文明一点就看下是不是受什么宏控制,把宏定义开启或者关闭。
又一个被骗的,那个只是提示信息,不是错误信息。
把loglevel的等级提高估计没了。
转载: LVGL V8之使用PC文件系统驱动适配lvgl文件系统
注册lvgl文件系统
void init_fs_config(void)
{
static lv_fs_drv_t pcfs_drv; /*A driver descriptor*/
lv_fs_drv_init(&pcfs_drv);
pcfs_drv.user_data = NULL;
pcfs_drv.letter = 'P';
pcfs_drv.ready_cb = pcfs_ready;
pcfs_drv.write_cb = pcfs_write;
pcfs_drv.open_cb = pcfs_open;
pcfs_drv.close_cb = pcfs_close;
pcfs_drv.read_cb = pcfs_read;
pcfs_drv.seek_cb = pcfs_seek;
pcfs_drv.tell_cb = pcfs_tell;
lv_fs_drv_register(&pcfs_drv);
}
文件系统是否准备好被回调函数pcfs_ready
bool pcfs_ready(lv_fs_drv_t* drv)
{
(void)drv; /*Unused*/
return true; //这里仅返回true,如果是嵌入式,则是返回嵌入式文件系统挂载成功与否的标志
}
打开文件被回调的函数pcfs_open
static void* pcfs_open(lv_fs_drv_t* drv, const char* fn, lv_fs_mode_t mode)
{
(void)drv; /*Unused*/
errno = 0;
const char* flags = "";
if (mode == LV_FS_MODE_WR) flags = "wb";
else if (mode == LV_FS_MODE_RD) flags = "rb";
else if (mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) flags = "a+";
/*Make the path relative to the current directory (the projects root folder)*/
char buf[256];
sprintf(buf, "./%s", fn);
return fopen(buf, flags);
}
写入文件被回调的函数pcfs_write
static lv_fs_res_t pcfs_write(struct _lv_fs_drv_t* drv, void* file_p, const void* buf, uint32_t btw, uint32_t* bw)
{
(void)drv; /*Unused*/
*bw = (uint32_t)fwrite(buf, 1, btw, file_p);
return LV_FS_RES_OK;
}
读取文件被回调的函数pcfs_read
static lv_fs_res_t pcfs_read(lv_fs_drv_t* drv, void* file_p, void* buf, uint32_t btr, uint32_t* br)
{
(void)drv; /*Unused*/
//pc_file_t* fp = file_p; /*Just avoid the confusing casings*/
*br = (uint32_t)fread(buf, 1, btr, file_p);
return LV_FS_RES_OK;
}
关闭文件被回调的函数pcfs_close
static lv_fs_res_t pcfs_close(lv_fs_drv_t* drv, void* file_p)
{
(void)drv; /*Unused*/
return fclose(file_p);
}
移动文件位置被回调的函数pcfs_seek
static lv_fs_res_t pcfs_seek(lv_fs_drv_t* drv, void* file_p, uint32_t pos,lv_fs_whence_t whence)
{
(void)drv; /*Unused*/
return fseek(file_p, pos, whence);
}
获取文件位置被回调的函数pcfs_tell
static lv_fs_res_t pcfs_tell(lv_fs_drv_t* drv, void* file_p, uint32_t* pos_p)
{
(void)drv; /*Unused*/
*pos_p = ftell(file_p);
return LV_FS_RES_OK;
}
初时化调用init_fs_config函数
init_fs_config();
加载外部图片
lv_obj_t* obj = lv_img_create(lv_scr_act());
lv_img_set_src(obj, "P:/lock_icon.bin");
lv_obj_center(obj);
效果图
加载外部字体需要匹配读取数据函数
static uint8_t __g_font_buf[364];//如bin文件存在SPI FLASH可使用此buff
static uint8_t *__user_font_getdata(int offset, int size){
//如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);
//如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);
lv_fs_file_t file;
lv_fs_res_t result;
result = lv_fs_open(&file, "P:/myFont.bin", LV_FS_MODE_RD);
if (result != LV_FS_RES_OK)
return NULL;
lv_fs_seek(&file, offset, LV_FS_SEEK_CUR);
uint32_t len;
lv_fs_read(&file, __g_font_buf, size, &len);
lv_fs_close(&file);
return __g_font_buf;
}
使用外部字显示
lv_obj_t* obj = lv_btn_create(lv_scr_act());
lv_obj_set_size(obj, 300, 300);
lv_obj_center(obj);
lv_obj_t* label = lv_label_create(obj);
lv_obj_set_style_text_font(label, &_myFont, 0);
lv_label_set_text(label, "外部字体测试");
lv_obj_center(label);
中文内容需要utf-8格式编译
#pragma execution_character_set("utf-8") `
在楼主的耐心帮助下,终于编译打包成功!
找到编译出错的原因了, 我用了电脑里面已有的 dl/ 目录,这里面的 linux/git/ 和 uboot/git 与楼主的环境冲突。 删除这些冲突目录就好了。
建议用Ubuntu16.04, 这里有干净版本ubuntu16.04虚拟机下载:
@jinxiangwzh
find 命令值得拥有。
find $PWD -name libpthread.so.0* -type f
@whycan
依葫芦画瓢:
$ grep cp -r package/ --include "Makefile" |grep libpthread
package/qt/qt5/Makefile: DEPENDS:=+librt +zlib +libstdcpp +libinput +libpthread +glib2 @!LINUX_2_6
package/lang/node/Makefile: DEPENDS:=+libpthread +librt +libstdcpp +libopenssl +libuv
package/network/alljoyn/alljoyn/Makefile: DEPENDS:=+libopenssl +libpthread +librt +libstdcpp +libcap
package/network/iotivity/Makefile: DEPENDS:=+iotivity +libpthread +libstdcpp
package/allwinner/liballwinner-ipc/Makefile: DEPENDS:=+libpthread +libstdcpp
package/allwinner/homlet/libvop/Makefile: DEPENDS:=+libpthread +libstdcpp
package/allwinner/homlet/p2p_utils/Makefile: DEPENDS:=+libpthread +libstdcpp
package/allwinner/homlet/p2p_utils/Makefile: DEPENDS:=+libpthread +libstdcpp
package/allwinner/softap/Makefile: DEPENDS:=+libpthread +libstdcpp +liballwinner-base +libopenssl +iw +hostapd +dnsmasq +iptables
package/allwinner/usb-gadget/Makefile: DEPENDS:=+libpthread +libstdcpp
package/allwinner/dlna-service/Makefile: DEPENDS:=+libpthread +libstdcpp +liballwinner-base +liballwinner
package/allwinner/peq/Makefile: DEPENDS:=+libpthread +libstdcpp +liballwinner-base +libopenssl +iw +alsa-utils
package/allwinner/logwrapper/Makefile: DEPENDS:=+libpthread +libstdcpp
package/allwinner/dlna_demo/Makefile: DEPENDS:=+libpthread +libstdcpp +liballwinner-base +liballwinner +dlna-service
package/allwinner/wifimanager/Makefile: DEPENDS:=+libpthread +libstdcpp +liballwinner-base
package/allwinner/bluetooth/Makefile: DEPENDS:=+libpthread +librt +alsa-lib +resample +libuci +libstdcpp
package/allwinner/smartlinkd/Makefile: DEPENDS:=+libpthread +libstdcpp +liballwinner-base +alsa-lib +libopenssl +libuci
package/libs/libdirectfb/Makefile: DEPENDS:=+libstdcpp +tslib +libpng +libjpeg +libpthread +libfreetype +libsysfs +flux
package/libs/boost/Makefile: DEPENDS:=+libstdcpp +libpthread +librt
package/libs/libglog/Makefile: DEPENDS:= +libstdcpp +libpthread +libunwind
package/libs/icu/Makefile: DEPENDS:=+libstdcpp +libpthread
package/routing/mcproxy/Makefile: DEPENDS:=+libpthread +libstdcpp @(!GCC_VERSION_4_4&&!GCC_VERSION_4_6)
$
$
@jinxiangwzh
修改 package/busybox-init-base-files 目录下面的 Makefile 文件, 增加一个复制 libc.so.6, libpthread.so.0的shell指令。
编译出了一点小问题, 下周继续跟进。
Windows 修改 C:\Windows\System32\drivers\etc\hosts
Linux 修改 /etc/hosts 添加:
140.82.112.4 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com
CATEGORY:=Utilities 指的是 make menuconfig 的第一级菜单。
然后再改一下 VFAT 的默认字符集,或者:
修改 /etc/usbmount/usbmount.conf
参考: https://community.volumio.org/t/utf-8-support-solved/196/2
/etc/usbmount/usbmount.conf 改成:
FS_MOUNTOPTIONS="-fstype=vfat,iocharset=utf8,gid=root,dmask=0777,fmask=0777"
用这个命令生成 patch文件:
diff -uNr file file > diff. patch
diff -uNr file2 file2 >> diff. patch
patch文件下载, 复制到 buildroot 的 package/busybox 目录下面:
@suitjune
sys_partition.fex 里面的rootf size要比buildroot里面的size大才行,否则pack的时候会出错。
@jr_online
还要配置 uboot-board.dts。
linux的驱动和 board.dts 暂时可以不用配置。
重新编译boot命令: mboot
哪吒开发板原理图: D1哪吒开发板原理图20210224.pdf
哪吒开发板元件标号图:开发板元器件标号图
D1 Brief : D1 Brief
D1 Datasheet: D1 Datasheet
D1 Manual: D1 Manual
D1 / D1s TINA v2.0 百度云盘下载:
链接: https://pan.baidu.com/s/1rTyKuWIwMUlBY4xLJofWEg?pwd=awol
提取码:awol
①解压:
cat tina_d1_open_v2.tar.bz2.a* | tar -xjv
②从本地repo仓库同步SDK
repo sync -l
③ source build/envsetup.sh
④ lunch
⑤ make
⑥ pack
建议先安装一下软件包避免编译或打包出错:
sudo apt-get install build-essential subversion git-core repo libncurses5-dev zlib1g-dev \
gawk flex quilt libssl-dev xsltproc libxml-parser-perl \
mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 \
libncurses-dev zlib1g-dev gawk openssl libssl-dev linux-tools-common gperf -y
@jr_online
在 u-boot 里面调试,可以输出一些调试信息,一般在u-boot开屏之后,Linux不再自动开屏了。
可以接个逻辑分析仪看下时序。
@smiletiger
我刚刚测试了 D1s SDK 2.0,muboot 之后会重新生成所有 uboot*.bin,
pack 之后会重新生成所有 uboot*.fex 文件,
并且 img 文件也更新 了。
@smiletiger
muboot 可以强制重新编译 uboot,至于你说文件没有变化,那你是指哪个目录下面的哪个文件,有没有比较前后的crc32/md5码?
@jinxiangwzh
SDK编译出来的img不是芯片烧录的最终镜像,
(有点类似 hex 文件那种意思)
烧录软件根据 sys_partiton_nor.fex 的起始地址,会帮你把数据烧到对应的地址。
@w666666
A20 就不建议玩微信了,
A133 + 1G DDR4 都一卡一卡的
A133 + 2D DDR3 刚好凑合
@exoy28
那或许不能这么操作了,你只要保证 evtest / getevent 输出的坐标和液晶显示一致,lvgl7 触摸问题不大,实在不行就在读 event 设备那地方加点调试代码。
@exoy28
event2 已经用 uinput 转换成屏幕坐标了,不是原始adc值了。
所以用 ts_test 不能再测试 event2 了。
但是这样操作或许可以:
TSLIB_TSDEVICE=/dev/input/event2 ts_calibrate
TSLIB_TSDEVICE=/dev/input/event2 ts_test
@exoy28
理论上没有问题的,实在不行可以在lvgl把event数据打印出来看看。
您再参考这个帖子:
收到芒果大佬的库存 DVP与MIPI 双摄像头R11开发板
https://bbs.aw-ol.com/topic/1305/share/8
PCB与原理图下载: bfc34c70-9e4e-4832-bc2c-9bbf3c809d8b-TINY200_git_20200906.7z
TF/16M NOR FLASH测试固件(非官方img格式):tiny200_lvgl_test_firmware_20220520.7z
SDK链接: buildroot-tiny200 (F1C100/200s) 开发包近期更新内容 * 已支持DVP摄像头 *
tiny200 淘宝购买链接: https://item.taobao.com/item.htm?id=587925184119
(貌似下架了)