使用F1C200S从零制作掌机之构建debian文件系统

news2024/9/22 10:07:13

前情:使用buildrootfs构建的文件系统调试了很久NES模拟器,执行InfoNES模拟器的时候一直黑屏,无内容显示,调不通了,所以改用debian系统试试。

一、环境配置

首先下载两个工具:qemu-arm-static和debootstrap。

  • qemu-arm-static:通过qemu-arm-static,我们在x86的Ubuntu PC机上,可以模拟ARM处理器,就像运行在ARM上一样进行各种操作。这样既实现了ARM环境,又利用了x86 PC的处理能力。
  • debootstrap:是Debian/Ubuntu下的一个工具,用来构建一套基本的系统(根文件系统)。生成的目录符合Linux文件系统标准(FHS),即包含了/boot、/etc、/bin、/usr等等目录,但它比发行版本的Linux体积小很多,当然功能也没那么强大,因此,只能说是“基本的系统”。
sudo apt install qemu-user-static -y
sudo apt install debootstrap -y
mkdir debian_rootfs

二、构建

2.1 下载

使用清华镜像源抽取根文件系统。其中foreign表示若目标架构与本机架构不符时,需要携带该参数;arch代表架构,armhf (支持硬件浮点)、armel (软浮点);verbose表示不打印wget等包下载数据,进行静默安装。

从https://www.debian.org/mirror/list.zh-cn.html

image-20240705134439996

华为镜像源

cd debian_rootfs
sudo debootstrap --foreign --verbose --arch=armel bullseye rootfs http://mirrors.huaweicloud.com/debian/

至此,已经下载了最小的Debian系统, 你也可以将它想象为"最小系统"类似的存在,没有其他 “外设” 。这里改为bullseye,网上大部分使用的buster提示出错,不知道以后bullseye会不会也出错。在buster下找不到binary-armel。

2.2 文件挂载

cd rootfs
sudo mount --bind /dev dev/
sudo mount --bind /sys sys/
sudo mount --bind /proc proc/
sudo mount --bind /dev/pts dev/pts/

2.3 模拟

sudo cp /usr/bin/qemu-arm-static  usr/bin/
cd ..
对拉取的Debian根文件系统进行配置。
sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs /debootstrap/debootstrap --second-stage --verbose
进入qemu虚拟器
sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs

2.4 配置

更新源
vi /etc/apt/sources.list
#写入: deb http://mirrors.huaweicloud.com/debian bullseye main
apt-get update

安装软件
apt-get install wpasupplicant #安装WIFI配置相关的组件
apt-get install net-tools     #安装网络基础组件、如使用ifconfig等
apt-get install udhcpc        #当wifi连接成功后,需要用这个组件去获取IP地址
apt-get install evtest        #触摸屏测试
apt-get install mplayer
apt-get install alsa-utils    #音频测试
apt-get install wireless-tools 
apt install sudo vim openssh-server htop
apt install pciutils usbutils acpi #acpi我没有安装成功,换了其他的源也不可以

设置root账号密码
passwd root
123456

配置时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

配置SSH
vi /etc/ssh/sshd_config
#写入: PermitRootLogin yes

apt clean #清理
exit #退出chroot
sudo rm rootfs/usr/bin/qemu-arm-static #删除之前拷贝的文件

cd rootfs
sudo umount   dev/pts/ # 一定要在/dev前面umount
sudo umount   dev/
sudo umount   sys/
sudo umount   proc/

sudo tar cvf ../rootfs.tar ./ #在rootfs目录下执行

2.5 启动

tar -xvf rootfs.tar -C /media/wang/rootfs/

uboot bootargs:

console=tty1 console=ttyS1,115200 panic=5 rootwait root=/dev/mmcblk0p2 rootfstype=ext4 earlyprintk rw Loglevel=7

2.6 增加swap分区(按需,在开发板执行)

free -m
dd if=/dev/zero of=/swap1 bs=1M count=512  #count是SWAP大小,512就是512MB
mkswap /swap1
swapon /swap1

vi /etc/fstab
# 最后一行添加 
/swap1 swap swap defaults 0 0

三、编译InfoNES

apt-get install gcc
apt-get install g++
apt-get install make
apt-get install libasound2-dev
apt-get install zlib1g-dev

使用的模拟器源码:https://files.cnblogs.com/files/twzy/arm-NES-linux-master.zip

源码进入linux目录,直接编译即可。拷贝nes游戏到文件系统。

在开发启动程序,屏幕可显示游戏界面。

四、注意

debian的版本,使用buster会报错,使用oldstable无法启动。最后改用bullseye。

修改rootfs分区大小为2048M。

五、debian系统下外设

待完成。

六、移植好的文件系统

https://download.csdn.net/download/weixin_36117563/89524570

七、参考

https://whycan.com/t_4236_10.html

https://blog.csdn.net/qq_41709234/article/details/128570505

https://blog.csdn.net/qq_41709234/article/details/128758130

https://www.cnblogs.com/twzy/p/15356127.html

https://mirrors.tuna.tsinghua.edu.cn/debian/dists/oldstable/main/

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

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

相关文章

SpringSecurity-SpirngBoot-方法级授权(SpringSecurity6.3新特性)(四)

SpringSecurity-SpirngBoot-方法级授权(SpringSecurity6.3新特性)(四) 本章使用SpringSecurity6.3新特性实现数据级别的鉴权,主要的目的是实现不同权限的用户查询同一个方法,限制一些内容只能拥有特定权限…

StarRocks分布式元数据源码解析

1. 支持元数据表 https://github.com/StarRocks/starrocks/pull/44276/files 核心类:LogicalIcebergMetadataTable,Iceberg元数据表,将元数据的各个字段做成表的列,后期可以通过sql操作从元数据获取字段,这个表的组成…

Linux--线程的控制

目录 0.前言 1.pthread库 2.关于控制线程的接口 2.1.创建线程(pthread_create) 2.2.线程等待(pthread_join) 代码示例1: ​编辑 ***一些问题*** 2. 3.创建多线程 3.线程的终止 (pthread_exit /…

python—读写csv文件

目录 csv库方法参数 读取数据 csv.reader方法 文件指定行或列数据读取操作 txt文件的readlines、read方法 csv.DictReader方法 写入数据 txt文件的write,writelines csv.writer方法 csv.DictWriter方法 读写联合(修改及插入数据) 读写csv 文件时&#xf…

语义言语流畅性的功能连接和有效连接

摘要 语义言语流畅性(SVF)受损在多种神经系统疾病中都存在。虽然已经报道了SVF相关区域的激活情况,但这些区域如何相互连接以及它们在脑网络中的功能作用仍存在分歧。本研究使用功能磁共振成像评估了健康被试SVF静态和动态功能连接(FC)以及有效连接。观察到额下回(…

c++初阶学习----入门(上)

大家好啊。最近学习了一点关于c的知识。这不就迫不及待的来与大家分享了嘛。但我这也是现学现卖所以咧。有很多遗落甚至不对的地方希望大家可以在评论区里面指出来。这样也可以增加大家对知识的巩固。 c语言与c的联系 不知道大家看到c会不会不由自主的联想到C语言啊。毕竟都是…

TVBox的Json配置接口编写指南,模板格式说明(如何打造一个专属于自己的TVBox配置文件)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 配置解析 📒📝 JSON基础📝 配置文件结构/参数说明📝 编写步骤📝 注意事项🎈 接口分享⚓️ 相关链接 ⚓️📖 介绍 📖 TVBox 是一款备受欢迎的电视盒子应用(免费影视必备),它以其高度自定义的特性深受用户喜爱…

Pearson 相关系数的可视化辅助判断和怎么用

Pearson 相关系数的可视化辅助判断和怎么用 flyfish Pearson 相关系数 是一种用于衡量两个连续型变量之间线性相关程度的统计量。其定义为两个变量协方差与标准差的乘积的比值。公式如下: r ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i −…

jitsi 使用JWT验证用户身份

前言 Jitsi Meet是一个很棒的会议系统,但是默认他运行所有人创建会议,这样在某种程度上,我们会觉得他不安全,下面我们就来介绍下使用JWT来验证用户身份 方案 卸载旧的lua依赖性sudo apt-get purge lua5.1 liblua5.1-0 liblua5.1-dev luarocks添加ubuntu的依赖源,有则不需…

AI时代算法面试:揭秘高频算法问题与解答策略

三种决策树算法的特点和区别 ID3算法:基本的决策树算法,适用于简单的分类问题C4.5算法:改进了ID3算法,适用于更复杂的分类问题,可以处理连续型数据和缺失值CART算法:更加通用的决策树算法,适用于…

住宅代理、移动代理和数据中心代理之间的区别

如果您是一名认真的互联网用户,可能需要反复访问某个网站或服务器,可能是为了数据抓取、价格比较、SEO 监控等用例,而不会被 IP 列入黑名单或被 CAPTCHA 阻止。 代理的工作原理是将所有传出数据发送到代理服务器,然后代理服务器将…

用LangGraph、 Ollama,构建个人的 AI Agent

如果你还记得今年的 Google I/O大会,你肯定注意到了他们今年发布的 Astra,一个人工智能体(AI Agent)。事实上,目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体(AI …

VBA实现Excel的数据透视表

前言 本节会介绍通过VBA的PivotCaches.Create方法实现Excel创建新的数据透视表、修改原有的数据透视表的数据源以及刷新数据透视表内容。 本节测试内容以下表信息为例 1、创建数据透视表 语法:PivotCaches.Create(SourceType, [SourceData], [Version]) 说明&am…

面对数据不一致性的解决方案:

polarDB是读写分离和计算存储分离的分布式数据库,并且副本的log replicate是基于Parallel-Raft协议来实现的。所以在瞬时进行写和读的操作时,是不可避免会存在数据一致性问题,导致这个数据一致性问题的原因不是事务,而是多副本日志…

【考研数学】李林《880题》25版听说大改版?和和24版差别大吗?

25版和24版总体差别不大,只有小部分内容有所变动! 拓展题部分的更新:25版在拓展题部分进行了一些更新,从李林的模拟题中挑选了大约40道题目添加到新版中。 高等数学:变动主要集中在前三章,但具体的题目变…

【C++】开源:坐标转换和大地测量GeographicLib库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍坐标转换和大地测量GeographicLib库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关…

Facebook社交平台的未来发展趋势分析

随着科技和社交需求的不断演变,Facebook作为全球最大的社交平台之一,其未来发展的趋势备受关注。从技术创新到社会影响,Facebook正在经历着前所未有的变化和挑战。本文将探讨Facebook未来发展的几个关键趋势,并分析其可能的影响和…

SpringBoot 实现视频分段播放(通过进度条来加载视频)

需求:现在我本地电脑中有一个文件夹,文件夹中都是视频,需要实现视频播放的功能。 问题:如果通过类似 SpringBoot static 文件夹的方式来实现,客户端要下载好完整的视频之后才可以播放,并且服务端也会占用大…

Androidstudio开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源:和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

用Vue3和Plotly.js绘制交互式3D散点图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Plotly.js 创建 2D 密度图 应用场景介绍 密度图是一种可视化数据分布的图表,它显示了数据点的密度在不同区域的变化情况。在许多科学和工程领域中,密度图被广泛用于探索和分析数据…