小白通过buildroot搭建哪吒D1开发环境详细步骤,并且在HDMI显示器上玩上了魂斗罗(基于QT5).(感谢晕哥对我的指导)
所有的内容都通过buildroot搭建,包括uboot,内核,qt5等等。
我是通过UBUNTU18.4搭建的,如果在buildroot的下载过程中遇到了半天都下不下来,直接就强行终止,然后执行
sudo systemd-resolve --flush-caches (UBUNTU18.4,其他的版本需要自己查)这个是刷DNS,我有的时候下载不动就用此命令。
1.apt-get update
2.sudo apt-get install -y sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio unzip rsync file bc wget python cvs git mercurial rsync scp subversion android-tools-mkbootimg libncurses5-dev
Bzr 注意:第2步骤是我自己摸索出来的,与韦东山老师要求安装的库的不同,请注意。
3.找一个文件夹 或者是home文件夹 mkdir -p ~/Neza-D1/ && cd ~/Neza-D1/ 这样就有Neza-D1文件夹了。
4.git clone https://gitee.com/weidongshan/neza-d1-buildroot.git buildroot-2021 这个是韦东山老师的buildroot,下载速度应该是比较快。
5.在buildroot-2021/configs/的文件夹下有neza-d1_defconfig,这个就是默认的配置文件。 通过make neza-d1_defconfig 生成默认文件。然后通过
make menuconfig 进入buildroot配置,Qt5的这三个库去掉。(我是下载不下来没有办法去掉的,如果可以下载下来,也不用去掉)
Qt5-coap需要去掉
Qt5-knx 需要去掉
Qt5-mqtt需要去掉
6.make all,这个过程非常漫长。完成之后会在buildroot/image下生成sdcard.img,通过写SD卡的工具写入就可以了。
7.写入之后,可以通过串口启动,就成功了一半,这个时候插入HDMI是不能识别,好像是sink什么什么错误。然后执行
mount -t debugfs none /sys/kernel/debug;
cd /sys/kernel/debug/dispdbg;
echo disp0 > name;
echo switch1 > command;
echo 4 10 0 0 0x4 0x101 0 0 0 8 > param;
echo 1 > start;
然后你的显示屏幕就只能显示左边一部分,然后你执行 cat /dev/urandom > /dev/fb0 应该可以看到左边一小半屏幕有雪花屏幕。
8.我的LCD是1024x600的,显示不全应该是设备树的问题,然后就修改uboot设备树和linux内核设备树。
uboot与linux内核都在 buildroot的output/build/目录下
uboot设备树在 uboot-origin_master文件夹下的 arch/boot/dts/uboot-board.dts
linux内核设备树在 linux-origin_master文件夹下的 arch/riscv/boot/dts/board.dts
两个设备树都要修改成下面这种,-就是要去掉,+就是要增加,其中dev0_output_mode是调分辨率
<10>就是1080p
<5> 就是720p
<2> 就是360p
具体可以查文档
disp_init_enable = <1>;
disp_mode = <0>;
- screen0_output_type = <1>;
- screen0_output_mode = <4>;
-
- screen1_output_type = <3>;
- screen1_output_mode = <10>;
-
- screen1_output_format = <0>;
- screen1_output_bits = <0>;
- screen1_output_eotf = <4>;
- screen1_output_cs = <257>;
- screen1_output_dvi_hdmi = <2>;
- screen1_output_range = <2>;
- screen1_output_scan = <0>;
- screen1_output_aspect_ratio = <8>;
-
- dev0_output_type = <1>;
- dev0_output_mode = <4>;
+ screen0_output_type = <3>;
+ screen0_output_mode = <10>;
+
+ screen0_output_format = <0>;
+ screen0_output_bits = <0>;
+ screen0_output_eotf = <4>;
+ screen0_output_cs = <257>;
+ screen0_output_dvi_hdmi = <2>;
+ screen0_output_range = <2>;
+ screen0_output_scan = <0>;
+ screen0_output_aspect_ratio = <8>;
+
+ screen1_output_type = <1>;
+ screen1_output_mode = <4>;
+
+ dev0_output_type = <4>;
+ dev0_output_mode = <10>;
dev0_screen_id = <0>;
- dev0_do_hpd = <0>;
-
- dev1_output_type = <4>;
- dev1_output_mode = <10>;
- dev1_screen_id = <1>;
- dev1_do_hpd = <1>;
+ dev0_do_hpd = <1>;
修改完成之后,在uboot-origin_master文件夹下与 linux-origin_master文件夹下都需要执行
rm .stamp_built
然后 在buildroot目录下 make all
然后下载到sd卡,
cat /dev/urandom > /dev/fb0 应该是全屏幕的雪花
9.这个时候插入鼠标键盘虽然有打印消息但是没有/dev/input/ 这个时候需要在内核加入Event interface,
修改完成还是需要 rm .stamp_built,烧入sd卡,这个时候就有/dev/input/eventx,这个时候鼠标与键盘还是不能用在qt5中。
export QT_QPA_GENERIC_PLUGINS=tslib,evdevkeyboard:/dev/input/eventx,evdevmouse:/dev/input/eventx
这个eventx需要根据实际情况来 这个时候qt5就支持键盘了.
10.交叉编译QT5的NES模拟器,我在github下的,它那个需要很多的依赖,
例如需要继承OPENGL。我后面就改成了,只要有最基本的库就可以了。(文件会随后发出来)
qmake在 buildroot的output/host/bin目录下,有qmake就可以交叉编译。
离线
qt4-NES4_5_512_480_640_480.7z
这个是QT5源文件,,qt4-NES4_5_512_480_640_480/Qt/hdl.nes 拷贝到根目录可以直接一运行,接上键盘就可以直接玩。
1 2 A W S D L O通过这几个键就可以玩魂斗罗啦,嘻嘻。
离线
这个是我的HDMI显示器图
离线
怎么感觉颜色不太对
离线
怎么感觉颜色不太对
显示器有一层膜的,可能与这个有关系,如果是色差太大,不排除与RGB处理无关。
离线
for (y = 0; y < NES_DISP_HEIGHT; y++ )//240
{
for (x = 0; x < NES_DISP_WIDTH; x++ )//256
{
*p=*(WorkFrame+(y*NES_DISP_WIDTH)+x);
*(*(WorkFrameX+(y<<1))+(x<<1))=*p;
*(*(WorkFrameX+(y<<1))+((x<<1)+1))=*p;
*(*(WorkFrameX+((y<<1)+1))+(x<<1))=*p;
*(*(WorkFrameX+((y<<1)+1))+((x<<1)+1))=*p;
}
}
这个是将图像放大两倍,mask一个标签
infones的linux版本 绘制点是一点一点计算,如果屏幕比较大,应该就比较慢
离线
楼主你好,是用 qmake 编译这个文件qt4-NES4_5_512_480_640_480\Qt\Qt.pro吗?
离线
楼主你好,是用 qmake 编译这个文件qt4-NES4_5_512_480_640_480\Qt\Qt.pro吗?
这个是qt的工程,具体操作是
1. cd ..../qt4-NES4_5_512_480_640_480/Qt/
这个是来到Qt.pro的目录下
2. ......output/host/bin/qmake
在这个目录下运行对应的qmake,自动生成Makefile文件
3. make clean
这个是清除编译的中间文件
4. make
make的过程中,可能有报错,通过vim修修,我这个如果在Windows下编译过,好像需要去掉某个头文件,打开报错的ui_xxxxx.h,注释掉 ness...h
5.再次make
编译成功就会有Qt这个可执行文件了,可以查看生成时间,看是不是刚刚生成的
6.将Qt 与 hdl.nes 这两个文件copy到板子的根文件,然后 cd / ls 看有没有这两个目录,如果有就 ./Qt 声音暂时没有移植上去,谁有兴趣可以在我的基础上改一下。
离线
我的Qt程序是在Windows下写的,验证通过,然后将整个文件夹复制到UBUNTU,然后交叉编译。
不过需要注意的是:在Windows下的程序不要调用Windows的系统函数,否则会交叉编译不通过
离线
优化的一下赋值方式,假设你需要显示的部分是512x480,从以前需要循,512x480次,现在只需要循环256x240次,但是这个算法只能放大整数倍。也就是算法从以屏幕分辨率为侧重点,到以原始数据为侧重点,当然,如果可以利用硬件资源显示就完美了,不过好像实际跑起来差不多。qt4-NES4_5_512_480_640_480_try_high_speed.7z
离线
会玩,MQ-Pro出来后送楼主一套
歪朵拉开源硬件: https://widora.cn
淘宝: https://widora.taobao.com/
离线
会玩,MQ-Pro出来后送楼主一套
芒果666,我就是linux新手,因为工作上用不到linux(我是做MCU与FPGA的,偶尔写一点上位机),我也踩了不少坑。现在学linux只能全凭借兴趣
离线
这才是正确的颜色 那个代码默认是rgb555的 你这颜色应该是rgb555怼到rgb565的显示器上
https://whycan.com/t_8108.html#p77745
离线
请问这个报错是什么意思呀?需要我去下一个解tar.xz的解压软件吗?
离线