开源掌机吧 关注:58,035贴子:867,934

从0开始构建开源掌机系统(从树莓派0开始)

只看楼主收藏回复

这篇文章比起教程更像是我的学习笔记,关于如何从零开始构建开源掌机系统,我希望这会是很好的参考资料。经过深思熟虑(其实也没有想太多),决定要选择一个常用的开发板作为教学,选来选去,最合适的还是树莓派zero。注意,这个教程经常会出现各种各样的坑,没办法一一向大家解释,如果遇到问题,可以在帖子留言或者qq问我。
希望这次教程可以让更多人关注开源掌机系统的软件开发上。授人以鱼不如授人以渔。
首先,是构筑系统,这里选用了buildroot,它可以构筑一个嵌入式用的精简linux,并且可以通过选择自己想要的包进行自定义,是一个十分好的工具。
wget https://buildroot.org/downloads/buildroot-2019.02.8.tar.gz
tar -zxvf buildroot-2019.02.8.tar.gz
make raspberrypi0_defconfig
按照司徒的建议,先使用常用的声音和显示,这里了添加alsa-lib和sdl1.2(image记得添加所有图片格式的支持)、sdl2、freetype、directfb,gdb,到时候缺什么包再补上(假如未来要构筑掌机,可以添加FB TFT drivers驱动和gpio驱动)
Filesystem images中的镜像大小exact size调大
make ARCH=arm -j8
烧写镜像,接入hdmi,用户root密码为空
接下来我们要开始编译我们的主菜单GMenuNext
首先从我的github上克隆项目下来
https://github.com/lualiliu/GMenuNX-on-raspberry-pi-zero.git
之后我们需要一个toolchain(交叉工具链),一般来说全志或者君正,网上都能找到工具链,
工具链和sysroot都可以用buildroot里的,这里LDFLAGS还要指定--sysroot

运行make dist
把生成的文件放入~/buildroot-2019.02.8/output/target/root/gmenu2x
再次生成sd卡镜像,烧写到sd卡上,把sd卡插入树莓派,接好线,再运行./gmenu2x
就可以看到效果了。

下一步,我们要做的就是移植第一个模拟器!


IP属地:广东1楼2020-01-06 15:52回复
    马克


    IP属地:福建来自手机贴吧2楼2020-01-06 16:00
    回复
      这才是真正玩家 比斯比的吧友好多了


      IP属地:辽宁来自Android客户端3楼2020-01-06 16:11
      回复
        等楼主更新完我也学学


        IP属地:辽宁来自Android客户端4楼2020-01-06 16:11
        回复
          老哥支持你,一起学习


          IP属地:福建来自Android客户端6楼2020-01-06 16:40
          回复
            写了一大段给吞了,无奈。
            还是不太习惯用贴吧。


            IP属地:广东7楼2020-01-06 16:54
            收起回复
              考虑用s905做个掌机,知识盲点在供电和屏幕显示输出,手柄可以用蓝牙板子自己可以搞定。组合板出来之后可以画一个壳子自己打印


              IP属地:河南来自iPhone客户端8楼2020-01-06 16:59
              收起回复
                支持鼓励


                IP属地:广东9楼2020-01-06 17:01
                回复
                  楼主厉害,期待


                  IP属地:北京10楼2020-01-06 17:25
                  回复
                    你这个教程是不是简略了一点。。。


                    IP属地:福建11楼2020-01-06 17:26
                    回复
                      這個可以置頂嗎?


                      IP属地:中国香港12楼2020-01-06 17:54
                      回复
                        支持。贴吧需要这样的分享。


                        IP属地:广东来自Android客户端13楼2020-01-06 18:00
                        回复
                          这是干货,不错。


                          IP属地:辽宁14楼2020-01-06 18:17
                          回复
                            第一个模拟器我打算从gb,gbc模拟器gambatte开始,首先我们需要安装构筑工具scons
                            sudo apt-get install scons
                            然后拖下司徒的源码
                            https://github.com/steward-fu/miyoo/releases/download/v1.2/gambatte.7z
                            修改SConstruct为我们的工具链,具体如下。

                            再参考其他文件编写build_raspberry_pi_zero.sh,执行编译。
                            我认为模拟器移植最重要的就是两个环节:编译成功和显示调节。
                            现在已经编译成功了,我们要做的就是显示调节。


                            IP属地:广东15楼2020-01-06 19:42
                            回复
                              这里需要一点SDL1.2基础,按照我的习惯,首先会寻找SDL_SetVideoMode在哪个位置。搜索后很显然,在sdlblitter.cpp中,我们要做的第一件事,就是把屏幕和其缓存拉大到屏幕大小,也就是SDL_SetVideoMode(0, 0, 16, SDL_SWSURFACE);
                              注意两个零的意思,在1.2.10中,它将会获取屏幕大小。
                              第二个要认识的函数,是SDL_BlitSurface,这个函数将把一个平面对象放到另一个平面对象里,认识了这两个函数,再读一下源代码,就明白它的原理其实就是不断把surface渲染到screen上罢了。
                              需要修改代码为

                              再修改一些细节,就可以实现模拟器的显示。
                              将模拟器放入sd卡后,最后我们要把模拟器信息放入gmenuNX里,在gmenu2x文件夹新建sections/emulators目录,写入路径信息:

                              再次运行./gmenu2x,就可以实现在主菜单中运行模拟器并且选择游戏。


                              IP属地:广东16楼2020-01-06 20:23
                              回复