switch自制软件开发环境搭建

news2024/11/16 7:38:15

参考:
https://switch.homebrew.guide/
https://switchbrew.org/wiki/Main_Page
https://www.bilibili.com/video/BV133411Q77X/?spm_id_from=333.788&vd_source=c5c272e9490d8bf475c8204462fc26e7

1.开发环境

开发机 -> 虚拟机 ubuntu22.04
设备 -> 破解switch + 大气层系统

2.开发环境搭建

2.1 pacman安装

wget https://apt.devkitpro.org/install-devkitpro-pacman
chmod +x ./install-devkitpro-pacman
sudo ./install-devkitpro-pacman

2.2 安装 switch-dev

sudo dkp-pacman -S switch-dev

安装完成后可以看到 /opt/devkitpro/ 多出来的文件
libnx : switch设备相关的接口 如按键等等操作
devkitA64 : switch的交叉编译环境
examples: switch开发的案例
tools : switch的工具 (elf执行文件转switch包,把switch包传输到switch等等工具)

2.3 环境变量配置

在自己配置的shell中加入下面几句 (bash对应.bashrc zsh对应.zshrc 等等)

export DEVKITPRO=/opt/devkitpro
export DEVKITARM=${DEVKITPRO}/devkitARM
export DEVKITPPC=${DEVKITPRO}/devkitPPC
export PATH=$PATH:${DEVKITPRO}/tools/bin

重启shell

3.hello world

3.1编译

git clone https://github.com/switchbrew/switch-examples.git
cd templates/application/
make

只要第二的步没什么问题应该是编译成功了可以看到输出的文件
在这里插入图片描述
.elf文件是交叉编译链编译出来的二进制执行文件
在这里插入图片描述
可以看到这个arm64的执行文件,但是这个文件不能这switch中执行。 .nro文件才是我们要的switch文件

3.2运行

switch启动hbmenu
R + A (不要松开R键,直到hbmenu启动)
在这里插入图片描述
然后按Y键,可以看到switch正在等待传输中,switch这边就准备完成

最后在ubuntu中执行

nxlink -s -a 192.168.163.199 application.nro

在这里插入图片描述
可以看到hello world执行成功

4.switch其他库

到目前为止的switch库应该只有 libc 相关的库 和 libnx switch库。
pacman包管理还有其他switch库,输入

dkp-pacman -Sl | grep switch

在这里插入图片描述
这些库都可以直接安装,如果没有你想要的库只能自己去编译

5.godot引擎导出switch包

5.1编译

godot官方版并不支持导出switch包,但是有大神做了一个支持导出的分支
https://github.com/Stary2001/godot.git
想自己编译源码可以看看godot的官方文档 https://docs.godotengine.org/zh_CN/stable/development/compiling/index.html
需要编译环境和pyhton环境就可以编译godot

5.2 直接下载编译好的版本

https://github.com/Stary2001/godot/releases
在这里插入图片描述
这里我们选择linux版本,下载完成后可以直接运行
在这里插入图片描述
这里不介绍这个引擎怎么使用,可以看官网

5.3 导出

直接点击 项目->添加->switch 然后下载对应的构建包
在这里插入图片描述
最后直接点导出即可

导出文件
在这里插入图片描述
把这两个文件传到switch就行

这里我们使用ftp工具上传
在这里插入图片描述

curl -T hello.pck ftp://192.168.163.199:5000/switch/
curl -T hello.nro ftp://192.168.163.199:5000/switch/

如果导出都使用的默认属性,可以看到switch有一个godot logo的程序
在这里插入图片描述
启动

在这里插入图片描述

6.twili工具

twili工具对标的是安卓的adb工具

6.1 下载

源码路径 :https://github.com/misson20000/twili
可以选择直接构建,但是还是建议使用编译好的版本https://github.com/misson20000/twili/releases
在这里插入图片描述
我们选择这两个执行文件,这两个执行文件依赖的glibc版本比较高,如果你用的是ubuntu22.04就没有这个问题。
把这两个文件的_linux后缀去掉

6.2 链接switch

首先运行 twibd

sudo apt install libasan6
sudo ./twibd

这个是这个工具的后台进程
使用type-C链接pc和switch
在这里插入图片描述
这里设备选择链接虚拟机

查看设备

sudo ./twib list-devices

在这里插入图片描述
使用ps查看进程

sudo ./twib ps

在这里插入图片描述
如果这里成功说明twili已经正常工作了
后续可以使用tcp替换掉usb,连接成功就可以拔掉usb线了

6.3 twili-gdb 编译

上面的一些东西我们都是用的编译好的版本,这个gdb没办法只能自己编译了,这次博客也是主要记录一下这个玩意的编译。这个玩意依赖很多,编译过程遇到的问题已经无法重现,主要是看history文件。

6.3.1 下载

git clone https://github.com/misson20000/twili-gdb.git

6.3.2 安装依赖

sudo apt install texinfo binutils-dev bison flex

6.3.3 编译

vim gdb/Makefile

把是警告为错误关闭 (-Werror相关的删除掉)

mkdir build
cd build
../configure --target=twili --enable-targets=twili --prefix=/usr --disable-sim
make

如果顺利的化可以看到生成的gdb
在这里插入图片描述

6.3.4 简单使用

$ twili-gdb
GNU gdb (GDB) 8.3.50.20190328-git
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-pc-linux-gnu --target=twili".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) target extended-remote | twib gdb
Remote debugging using | twib gdb
(gdb)

进入gdb直接执行target extended-remote | twib gdb。这指令猜测是输入输出重定向用的

之后直接attach pid就行,pid就是 twib ps 第一列的参数。当然这种方法只能调试sysmodule的进程,我们的hello world调试不了,官方给的方法我没有运行成功,而且容易死机

7.总结

  • 如果只是搭建开发环境看标题2就行
  • 如果是想开发游戏,又不想用openGL或者SDL,可以看看godot引擎的使用
  • 最后的twili工具和gdb我还是实验性的阶段,这玩意容易死机,github上的教程没有完全跑通,有什么进展后续更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu20.04系统WineHQ7.0安装微信

提供3种Ubuntu系统安装微信的方法&#xff0c;在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信&#xff1a;ubuntu20.04安装最新版微信--可以支持微信最新版&#xff0c;但是适配的不是特别好&#xff1b;比如WeChartOCR.exe 报错。2. 原生微信安装&#xff1a;linux系统下的微信…

[电商实时数仓] 数据仓库建模过程分析

文章目录1.数据仓库概述1.1 数据仓库概念1.2 数据仓库核心架构2.数据仓库建模概述2.1 数据仓库建模的意义2.2 数据仓库建模方法论2.2.1 ER模型2.2.2 维度模型3.维度建模理论之事实表3.1 事实表概述3.2 事实表分类3.3 事务事实表4.维度建模理论之维度表5.数据仓库设计5.1 数据仓…

[前端笔记——HTML 表格] 8.HTML 表格

[前端笔记——HTML 表格] 8.HTML 表格1.HTML 表格基础1.1 什么是表格&#xff1f;1.2 创建表格&#xff1a;2.HTML 表格高级特性和无障碍2.1 使用<caption>为表格增加一个标题2.2 添加<thead>,<tfoot>和<tbody>结构2.3 嵌套表格2.4 对于视力受损的用户…

第五层:C++中的运算符重载

文章目录前情回顾运算符重载概念为什么会出现运算符重载运算符重载中函数名格式加减运算符重载作用实现左移运算符重载作用左移运算符是什么&#xff1f;实现递增递减运算符作用实现前置后置赋值运算符重载关系运算符重载作用实现函数调用运算符重载第二种重载掌握&#xff01;…

vueJs中toRaw与markRaw函数的使用比较

01toRaw()函数接收一个reactive响应式数据,将一个响应式的数据变为普通类型的数据,转化为非响应式数据,相当于还原对象,reactive相当于制作,但对于ref响应式数据不起作用将一个由reactive生成的响应式对象转为普通(原始)对象toRaw()可以返回由reactive(),readonly(),shallowRea…

Java_Git:1. Git简介

目录 1 Git历史 2 Git与Svn对比 2.1 Svn特点 2.2 Git特点 3 Git工作流程 4 Git的安装 4.1 软件下载 4.1.1 git 4.1.2 tortoisegit 4.2 软件安装 4.2.1 安装git for windows 4.2.2 安装TortoiseGit 4.2.3 安装TortoiseGit中文语言包 1 Git历史 版本控制系统目标&…

Spread 16.0.2 for Winforms Crack-2023.1.4 Version

Spread使用这些无依赖性的 WinForms 电子表格组件探索 WinForms 企业应用程序的可能性。 Spread新增&#xff1a;v15 NuGet 包现在支持 .NET 6.0、.NET Core 3.1 和 .NET 4.62 使用桌面设计器应用程序快速提供类似 Excel 的电子表格体验 使用全面的 API创建企业电子表格、网格…

【Python-Django】医疗辅助平台-创建项目-day1

前期准备请参考此文: https://codeknight.blog.csdn.net/article/details/126780724https://codeknight.blog.csdn.net/article/details/126780724下载BootStrap插件: Bootstrap v3 中文文档 Bootstrap 是最受欢迎的 HTML、CSS 和 JavaScript 框架,用于开发响应式布局、移…

字符串匹配算法详解

为保证代码严谨性&#xff0c;文中所有代码均在 leetcode 刷题网站 AC &#xff0c;大家可以放心食用。皇上生辰之际&#xff0c;举国同庆&#xff0c;袁记菜馆作为天下第一饭店&#xff0c;所以被选为这次庆典的菜品供应方&#xff0c;这次庆典对于袁记菜馆是一项前所未有的挑…

excel图表美化:用散点标记制作不一样的折线图

柱形图常常用于显示一段时间内的数据变化或显示各项之间的比较情况。但当时间序列过多时&#xff0c;我们往往考虑用折线图来反映数据的变化趋势。之所以讲这个&#xff0c;是希望大家能够把折线图和柱形图的应用区分开来&#xff0c;根据自己的需求使用不同的图表。以下是各个…

深度学习 GNN图神经网络(一)图的基本知识

一、前言 本文主要介绍图的一些基础知识&#xff0c;不会太深奥&#xff0c;够用就行。我们以民国最出名的七角恋人物关系图为例进行讲解。 二、图的概念 图&#xff08;Graph&#xff09;可以用来描述实体之间的关系。 如下图所示&#xff0c;一张图捋清民国最出名的七角恋…

DW动手学数据分析Task5:数据建模及模型评估

目录1 建模1.1 数据分析流程1.2 模型搭建准备工作1.2.1 导入库1.2.2 载入数据1.3 模型搭建1.3.1 选择模型1.3.2 切割训练集和测试集1.3.3 模型创建1.3.4 输出模型预测结果2 评估2.1 评估的准备工作2.2 模型评估2.2.1 交叉验证2.2.2 混淆矩阵2.2.3 ROC曲线1 建模 1.1 数据分析流…

Mac创建python2虚拟环境

前提&#xff1a;已经安装配置好python2.7版本&#xff0c;使用python和pip命令可以得到如下返回信息 1.安装virtualenv和virtualenvwrapper pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple sudo pip install virtualenvwrapper -i https://pypi.tuna.t…

1595_AURIX_TC275_PMU_应用提示2

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 如果通过标注来标注了异常字行&#xff0c;那么在算法设计的时候&#xff0c;检查到之后应该跳过这一行的数据。 可以纠正的ECC在PFlash中是可以忽略的&#xff0c;相应的信息只是可以用来…

【SpringCloud】Ribbon负载均衡的基本原理与使用

【SpringCloud】Ribbon负载均衡的基本原理与使用 一、负载均衡原理 二、源码解析 LoadBalanced IDEA源码跟踪 负载均衡源码小结 三、负载均衡策略 负载均衡策略 策略规则解析 自定义负载均衡策略 &#xff08;1&#xff09;代码方式 &#xff08;2&#xff09;配置文…

Unity的Bounds(包围盒)简记

Unity的Bounds&#xff08;包围盒&#xff09;简记一、Bounds(包围盒)概述1.什么是包围盒?2.包围盒的类型2.1 AABB包围盒(Axis-aligned bounding box)2.2 包围球(Sphere)2.3 OBB方向包围盒(Oriented bounding box)2.4 FDH固定方向凸包(Fixed directions hulls或k-DOP)2.5 包围…

云服务器部署前后端分离项目(若依)详细教程

第一次在Linux云服务器上部署前后端分离项目&#xff0c;查了很多资料和视频&#xff0c;踩了许多坑。成功实现部署若依的前后端分离项目后&#xff0c;想记录一下前后端部署的过程&#xff0c;供学习的小伙伴参考。 目录1. 环境准备2. 开放端口3. 下载前后端项目4. 前端部署5.…

Linux部署Kafka及常见问题记录

Linux部署Kafka及常见问题记录kafka 使用场景Kafka 基本概念BrokerTopic(主题)Partition(分区)ProducerConsumerConsumer Group&#xff08;消费者群组&#xff09;offset 偏移量Linux 安装&启动 kafka修改核心配置文件创建数据存放目录启动验证 kafk 是否启动成功Topic (主…

AX7A200教程(1):DDR3仿真平台搭建(一)

本章节主要调用官方的MIG控制器&#xff0c;并使用官方的MIG控制器进行仿真&#xff0c;开发环境vivado2020.1鉴于很多童鞋无法仿真自己新建的DDR工程&#xff0c;即使使用modelsim仿真也仿真失败&#xff0c;本例程着重在vivado中对自己新建的带DDR3的工程进行仿真。新建DDR3工…

Python SciPy 插值及其他各种插值法

SciPy 插值什么是插值&#xff1f;在数学的数值分析领域中&#xff0c;插值&#xff08;英语&#xff1a;interpolation&#xff09;是一种通过已知的、离散的数据点&#xff0c;在范围内推求新数据点的过程或方法。简单来说插值是一种在给定的点之间生成点的方法。例如&#x…