From 1d0797fd482c6eed4190b7ba146a76d71ae2e7fd Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 29 Mar 2020 19:32:47 +0100 Subject: [PATCH] A script to build a gcw0 sdcard image * od_gcw0_defconfig adjusted to build the linux kernel. * Kernel modules squashfs built as a post-image step. * Adds od-imager host package. Signed-off-by: Gleb Mazovetskiy --- .../gcw0/build-linux-modules-squashfs.sh | 12 ++ board/opendingux/gcw0/download_local_pack.sh | 172 ++++++++++++++++++ board/opendingux/gcw0/make_initial_image.sh | 48 +++++ .../package/od-imager/od-imager.hash | 1 + .../opendingux/package/od-imager/od-imager.mk | 15 ++ configs/od_gcw0_defconfig | 10 + 6 files changed, 258 insertions(+) create mode 100755 board/opendingux/gcw0/build-linux-modules-squashfs.sh create mode 100755 board/opendingux/gcw0/download_local_pack.sh create mode 100755 board/opendingux/gcw0/make_initial_image.sh create mode 100644 board/opendingux/package/od-imager/od-imager.hash create mode 100644 board/opendingux/package/od-imager/od-imager.mk diff --git a/board/opendingux/gcw0/build-linux-modules-squashfs.sh b/board/opendingux/gcw0/build-linux-modules-squashfs.sh new file mode 100755 index 000000000000..d4a30bc4e076 --- /dev/null +++ b/board/opendingux/gcw0/build-linux-modules-squashfs.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +set -e + +# Build modules.squashfs +eval $(make -s printvars VARS=LINUX_DIR QUOTED_VARS=YES) +if [ -f "${LINUX_DIR}/create_modules_fs.sh" ]; then + "${LINUX_DIR}/create_modules_fs.sh" + cp "${LINUX_DIR}/modules.squashfs" "$1" +else + echo "modules.squashfs not built because ${LINUX_DIR}/create_modules_fs.sh is missing" +fi diff --git a/board/opendingux/gcw0/download_local_pack.sh b/board/opendingux/gcw0/download_local_pack.sh new file mode 100755 index 000000000000..dbed9c8fe8c7 --- /dev/null +++ b/board/opendingux/gcw0/download_local_pack.sh @@ -0,0 +1,172 @@ +#!/usr/bin/env bash + +set -euo pipefail + +decode_uri_filename() { + while read; do + echo -e "${REPLY//%/\\x}" + done +} + +dl() { + local -r url="$1" + local filename + if [[ $# -eq 2 ]]; then + filename="$2" + else + filename="$(basename "$url" | decode_uri_filename)" + fi + + local -a curl_args=(-L --fail --remote-time -o "$filename" -#) + if [[ -f "$filename" ]]; then + # Only re-download if the remote file is newer than the local one + curl_args+=(-z "$filename") + fi + set -x + curl "${curl_args[@]}" "$url" + { set +x; } 2>/dev/null +} + +declare -r RGH_OD_REPO="https://raw.githubusercontent.com/retrogamehandheld/OpenDingux/master" +declare -r SEONG_RG350_REPO="https://raw.githubusercontent.com/SeongGino/RetroGame350-AppRepo/master" + +mkdir -p dl/od_local_pack/ +cd dl/od_local_pack/ + +# Most sources come from a list maintained here: +# https://github.com/SeongGino/RetroGame350-AppRepo + +## Applications + +# ODcalc | Calculator +dl https://github.com/Jakz/open-dingux-calculator/releases/latest/download/odcalc.opk + +# FFPlay | Video player +dl "${RGH_OD_REPO}/Applications/FFPlay.opk" + +# Oldplay | Music player +dl "${RGH_OD_REPO}/Applications/Oldplay.opk" + +# Bard | E-book reader +dl "${RGH_OD_REPO}/Applications/Bard.opk" + +# Glutexto | Text editor +dl "${RGH_OD_REPO}/Applications/Glutexto.opk" + +# GMU +dl "${SEONG_RG350_REPO}/Applications/gmu-0.10.1-gcw0.opk" + +# ST-SDL | Terminal +dl https://github.com/glebm/rs97_st-sdl/releases/latest/download/st-rg350.opk + +# HWTest | Input tester +dl "${RGH_OD_REPO}/Applications/HWTest.opk" + +# Built as part of the buildroot: +# * DinguxCommander + +## Emulators +# Some renamed after download to default names used by SimpleMenu: +# https://github.com/fgl82/simplemenu/blob/8102ffd50615837837f0a5f97d7fc32758689e01/simplemenu/configs/RG-350/config/sections.cfg + +# gambatte +dl https://github.com/bardeci/dot-matrix-simulator/releases/download/20200127/gambatte-multi-r572u4-20200127.opk \ + gambatte-gcw0-r572u3-20190718-004431.opk + +# fceux +dl "${SEONG_RG350_REPO}/Emulators/FCEUX_2019-11-15.opk" \ + fceux.opk + +# nestopia +dl https://rs97.bitgala.xyz/RG-350/localpack/extra_apps/nestopia-28b16e5.opk + +# PocketSNES +dl "${SEONG_RG350_REPO}/Emulators/PocketSNES_2019-12-12.opk" \ + PocketSNES.opk + +# SMS Plus GX +dl https://gameblabla.nl/files/ipk/gcw0/smsplus_gcw0.opk + +# Picodrive +rm -f picodrive.opk +dl https://gameblabla.nl/files/ipk/gcw0/picodrive_gcw0.opk \ + picodrive.opk + +# Genesis Plus GX +dl "${SEONG_RG350_REPO}/Emulators/GenesisPlusGX_2019-12-23.opk" \ + GenplusGX.opk + +# ReGBA +dl "${SEONG_RG350_REPO}/Emulators/ReGBA_2019-12-26.opk" \ + Regba.opk + +# Temper | NEC PC-Engine/TurboGrafx-16, CD System +dl https://gameblabla.nl/files/ipk/gcw0/temper_rs97_gcw0.opk \ + temper1.24.opk + +# SmallPCFX | NEC PC-FX +# TODO: https://github.com/gameblabla/pcfx-mednafen/ + +# Snes9x +rm -f Snes9x_*.opk +dl "${SEONG_RG350_REPO}/Emulators/Snes9x_2019-11-11.opk" + +# SwanEmu | Bandai Wonderswan (B/W, Color) +dl https://gameblabla.nl/files/ipk/gcw0/swanemu_gcw0.opk + +# NEO4All | SNK Neo-Geo CD +rm -f NEO4All*.opk +dl "${SEONG_RG350_REPO}/Emulators/NEO4All_2019-12-16.opk" + +# NGPCEmu | SNK Neo-Geo Pocket (B/W, Color) +dl https://gameblabla.nl/files/ipk/gcw0/ngpcemu_gcw0.opk + +# Retro8 +dl https://github.com/Jakz/retro8/releases/download/0.1b/retro8_v1b_20200108.opk + +# ScummVM +dl https://github.com/craigsc/scummvm-rg350/releases/download/v0.2/scummvm-rg350-01132020.opk + +# DOSBox +dl "${SEONG_RG350_REPO}/Emulators/DOSBox_2019-11-11-launcher.opk" + +# midpath | J2ME emulator +dl https://rs97.bitgala.xyz/RG-350/localpack/extra_apps/midpath_20170502_GCW0.opk + +# Built as part of the buildroot: +# * pcsx4all + +## Ports (require additional data) + +# PRBoom+ | Doom +dl 'https://github.com/Ninoh-FOX/PrBoom-plus-for-RG350/releases/latest/download/prboom+.opk' + +# EDuke32 | Duke Nukem 3D +dl "${RGH_OD_REPO}/Games%20%26%20Ports/EDuke32.opk" + +# DevilutionX | Diablo +dl https://github.com/diasurgical/devilutionX/releases/latest/download/devilutionx-rg350.opk + +## Games + +# Arkanoid +dl "${RGH_OD_REPO}/Games%20%26%20Ports/Arkanoid.opk" + +# Blockrage +dl "${RGH_OD_REPO}/Games%20%26%20Ports/Blockrage.opk" + +# Mr. Drillux +dl https://github.com/jbanes/rs97-mrdrillux/releases/latest/download/mrdrillux.opk + +# Cave Story +dl "${RGH_OD_REPO}/Games%20%26%20Ports/NXEngine.opk" + +# Slitherlink +dl https://github.com/glebm/od-slitherlink/releases/latest/download/slitherlink-rg350.opk + +# Built as part of the buildroot +# * BlockAttack +# * Hocoslamfly +# * Ghouls'n Ghosts Remix + +cd - diff --git a/board/opendingux/gcw0/make_initial_image.sh b/board/opendingux/gcw0/make_initial_image.sh new file mode 100755 index 000000000000..2bafb32d1b5f --- /dev/null +++ b/board/opendingux/gcw0/make_initial_image.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +# Builds a full SD card image +# +# If you want the localpack apps included in the image, run this first: +# board/opendingux/gcw0/download_local_pack.sh + +set -e + +make world mininit ubiboot host-od-imager + +# Data image (OPKs): +cd output/images +mkdir -p od-imager/apps/ +rm -f od-imager/apps/* +if [ -d ../../dl/od_local_pack_gcw0/ ]; then + cp ../../dl/od_local_pack_gcw0/*.opk od-imager/apps/ +fi +if [ -d opks ]; then + cp opks/*.opk od-imager/apps/ +fi + +# System image +cp mininit-syspart od-imager/ +cat vmlinuz.bin gcw0.dtb > od-imager/vmlinuz.bin +cp modules.squashfs od-imager/ +cp rootfs.squashfs od-imager/ +# Fallbacks are empty as this is the initial image. +echo -n > od-imager/vmlinuz.bak +echo -n > od-imager/modules.squashfs.bak + +# Bootloader +cp ubiboot/ubiboot-v20_mddr_512mb.bin od-imager/ubiboot.bin +cd - + +# Assemble partitions and the final image +cd output/images/od-imager/ +./create_mbr.sh +./create_system_image.sh +./create_data_image.sh +./assemble_images.sh +cd - + +echo +echo 'SD card image created in:' +echo output/images/od-imager/images/sd_image.bin +echo Size: +du -sh output/images/od-imager/images/sd_image.bin diff --git a/board/opendingux/package/od-imager/od-imager.hash b/board/opendingux/package/od-imager/od-imager.hash new file mode 100644 index 000000000000..ecd1815b5c13 --- /dev/null +++ b/board/opendingux/package/od-imager/od-imager.hash @@ -0,0 +1 @@ +sha256 9e2022812c2faf13d9cc71ea517af393ae8539770957e0de3921c50ebef880ef od-imager-8d01931.tar.gz diff --git a/board/opendingux/package/od-imager/od-imager.mk b/board/opendingux/package/od-imager/od-imager.mk new file mode 100644 index 000000000000..59d9bf37cfa7 --- /dev/null +++ b/board/opendingux/package/od-imager/od-imager.mk @@ -0,0 +1,15 @@ +############################################################# +# +# od-imager +# +############################################################# + +OD_IMAGER_VERSION = 8d01931 +OD_IMAGER_SITE = $(call github,glebm,imager,$(OD_IMAGER_VERSION)) + +define HOST_OD_IMAGER_INSTALL_CMDS + mkdir -p $(BINARIES_DIR)/od-imager + cp $(@D)/*.* $(BINARIES_DIR)/od-imager +endef + +$(eval $(host-generic-package)) diff --git a/configs/od_gcw0_defconfig b/configs/od_gcw0_defconfig index 9541ee65eee9..ed7dd2e9d98d 100644 --- a/configs/od_gcw0_defconfig +++ b/configs/od_gcw0_defconfig @@ -20,9 +20,19 @@ BR2_ROOTFS_DEVICE_TABLE="board/opendingux/device_table.txt" BR2_ROOTFS_MERGED_USR=y BR2_SYSTEM_ENABLE_NLS=y BR2_TARGET_TZ_INFO=y +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/OpenDingux/linux/archive/jz-5.3-gcw0.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="gcw0" +BR2_LINUX_KERNEL_VMLINUZ_BIN=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="ingenic/gcw0" +BR2_TARGET_UBIBOOT=y +BR2_TARGET_UBIBOOT_BOARDNAME="gcw0" BR2_ROOTFS_USERS_TABLES="board/opendingux/users.txt" BR2_ROOTFS_OVERLAY="board/opendingux/gcw0/overlay" BR2_ROOTFS_POST_BUILD_SCRIPT="board/opendingux/gcw0/cleanup-rootfs.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/opendingux/gcw0/build-linux-modules-squashfs.sh" BR2_PACKAGE_BUSYBOX_CONFIG="board/opendingux/busybox.config" BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y BR2_PACKAGE_ALSA_UTILS=y