优雅地使用计算器上网!(下) 定制你的 Linux for Nspire

(距离上篇教程发布已经整整一个学期过去了,终于有时间填这个坑了)
注意:本篇教程是面向小白向的,但是仍建议有一定 Linux 基础的计算器玩家尝试

本篇教程将教你如何从零开始定制 Nspire 能使用的 Linux 系统,包括制作 rootfs,配置并编译内核与各类驱动模块


0x00 准备工作

需要准备的东西:
一份 Linux Kernel 源码,可以在 https://kernel.org/ 下载
(需要注意的是,Linux 内核在 4.14 以后的版本中对 Nspire 的支持有些许问题,故建议下载 4.14 以及之前的 longterm 版本)
一台 Linux 系统的点好,并需要配置好交叉编译工具链
一个 4G 以上容量的 U 盘

0x01 制作 rootfs

关于 rootfs 是什么,你可以自行查阅 Wikipedia (逃)

首先你需要安装 debootstrap 等工具,以 Manjaro 系统为例:
sudo pacman -S binfmt-support qemu-user-static debootstrap
其中,debootstrap 是用来制作 rootfs 的工具,而 qemu-user-static 则允许你 chroot 到不同体系结构的 rootfs 中

安装完成后,挂载准备好的 U 盘到任意位置,执行
sudo debootstrap --arch=armel --foreign buster /*挂载 U 盘的位置*/ https://mirrors.ustc.edu.cn/debian
其中,
buster 代表你制作的 rootfs 系统的版本(Debian 10)
armel 全称是 arm eabi little endian,代表你制作的 rootfs 软件包的体系结构,因为 Nspire 使用的是一颗 arm926ejs 内核的处理器,故选择此版本

在等待这条命令执行完毕后,使用 chroot 切换根目录环境至目标 rootfs

切换完成后,因为安装了 qemu-user-static, 可以看到 CPU 已经变成虚拟的 armv7l 版本了
CPU

执行/debootstrap/debootstrap --second-stage.进行第二部分配置
待到配置完成后,按照你的需求安装一些常用的软件包,rootfs 就制作完成了

0x02 配置 Linux 内核

首先确认你已经装好了交叉编译工具链 arm-none-eabi-gcc
关于不同 Linux 发行版安装工具链的方法请自行 Google

cd 到存放 Linux 内核源码的目录,执行 ARCH=arm make menuconfig 进入图形化配置界面

config

设置交叉编译工具为 arm-none-eabi- 并设置目标内核的 CPU 架构与系统类型

cpu-type

system-type

配置互联网协议栈
network

配置网卡驱动
因为使用的是 MT7601 无线网卡,在内核内就有驱动支持,直接选定即可
如果你的无线网卡驱动没有内核支持,可以自行寻找源码编译
mt7601

按照你的需求配置一些其他设备的驱动与内核 module ,配置完成后保存配置文件并退出
exit

配置完成后,即可进入下一个环节

0x03 编译 Linux 内核与 Modules

首先编译 Linux 内核
执行 ARCH=arm make -j*你的 CPU 线程数量* 编译
比如一颗 4 核心 8 线程的 CPU,执行 ARCH=arm make -j8

注:如果报错找不到编译期,请查看你的交叉编译工具链的目录是否在 PATH

编译完内核后,继续编译内核模块
执行 ARCH=arm make modules_install INSTALL_MOD_PATH=/*rootfs 所在的目录*/

全速编译中
build

等到全部编译完成之后,提取编译的 zImagedtb文件
分别位于:
arch/arm/boot/zImage
arch/arm/boot/dts/cx.dtb

之后就是按照上篇教程在计算器上使用了23333

至此,本篇教程结束

NOIP 2013 货车运输

RT,一道裸的 Kruskal 重构树题。因为存在点与点之间不连通的问题,所以在跑完 Kruskal 以后对每个树以并查集的根为根进行剖分求LCA。

Wolfram QQ 机器人

很久以前就有写一个这玩意的想法了,前一阵子了解到了 Wolfram 搞了一个面向开发者的 Wolfram Engine,于是打算搞一个基于这个的 QQBot。
因为 Wolfram Engine 部署的位置和系统等因素,不知为何 Python 的 Wolfram Client 接口一计算就会报错,于是只能用简单粗暴的使用 提取命令 -> 创建 .wl 脚本 -> 解释运行并获取结果 这种十分不优雅的解决方法了。
仍然依赖 Coolq HTTP API
下面是代码

Bilibili 网页端部分 API 简单分析

这篇博客源自我一个弃坑的项目,原计划是实现对 Bilibili 用户的收藏夹进行解析并自动下载其中的视频。
(代码只写了 API 解析部分,比较丢人,所以扔在 https://paste.ubuntu.com/p/PDpqqMN2vz/ 里了)


0x01 用户收藏夹 API

1.用户收藏夹列表
API 地址:
https://api.bilibili.com/medialist/gateway/base/created?pn=1&ps=100&up_mid=[用户UID]&is_space=0&jsonp=jsonp
需要的 Headers 参数:

返回的参数(以我自己 SpinMrY, 10688065 为例):

其中比较有用的信息:

2.收藏夹内容
API 地址:
https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=[收藏夹ID]&pn=[页数]&ps=20&keyword=&order=mtime&type=0&tid=0&jsonp=jsonp
需要的 Headers 参数:

返回的参数的解析结果(以收藏夹 测试收藏夹, 447052565为例):

参数较多,选取一些参数进行解释:


0x02 关于 UP 主的 API
API 地址:
https://space.bilibili.com/ajax/member/getSubmitVideos?mid=[UP主ID]&pagesize=10&tid=0&page=[页数]&keyword=&order=pubdate
需要的 Headers 参数:

返回的参数的解析结果(以 UP 主 Arnie97, 631106为例):

参数较多,选取一些参数进行解释:


0x03 视频 API 分析
API 地址:
'https://api.bilibili.com/x/web-interface/view?aid=[av号]
需要的 Headers 参数:

返回的参数的解析结果(以 UP 主 Arnie97, 631106 的 av7864057 为例):

参数较多,选取一些参数进行解释:


优雅地使用计算器上网!(上) Nspire CX 运行教程 & 效果展示

RT,在刚接触 Nspire 上运行 Linux 的时候就在想,是否可以在计算器上移植一个网卡驱动来实现计算器上网?外国论坛和油管上也有计算器上网的视频。然而无论是 cncalc 还是其他国内的计算器社区都对此很少有研究。在自己尝试过 Hackspire 上的 Linux 教程以后,发现它的内核已经很久没有更新过,且 rootfs 完全无法正常启动。正好这两天暑假抽出了时间,准备开始从零开始自己搭建一个计算器 Linux 内核并且做出一个比较完整的运行环境。经过三个晚上的努力,终于跑起来了 Linux 4.4.185 + Debian 10 + MT7601U 无线网卡驱动,成功实现计算器上网!(在此感谢在编译内核中给我很大帮助的dalao @FlyGoat)

在上半篇文章中,我打算主要展示运行效果以及怎样在 Nspire 计算器上运行已经制作好的内核和 rootfs,于是具体内核的编译细节,网卡驱动移植以及 rootfs 制作将放到下半篇文章中。

( ps : 本人刚刚接触嵌入式 Linux,如有词语使用不当还请轻喷 Orz )


0x00 准备工作

需要的设备:
一个 Nspire 系列的计算器(废话)
一个有外接供电的 USB Hub
一个 4G 以上容量的 U 盘
计算器需要装有 ndless,引导 linux 需要 linuxloader2 (下载地址:https://tiplanet.org/nspire-linux-builds/linuxloader2.tns))
建议先阅读 cncalc 上 @panyaolin123 的 《Nspire使用U盘引导linux进入图形界面教程》以及 Hackspire 上关于 Linux 的教程 (https://hackspire.org/index.php?title=Linux))

内核 zImage, 不同型号计算器的 DTB, MT7601U USB 无线网卡的 rootfs,内核源码以及编译的配置文件下载地址:
链接: https://pan.baidu.com/s/1fHDh0pHMQpWXsjipTfd7Rg 提取码: m8fb

0x01 制作启动 U 盘

要启动完整的 Linux 系统,你需要制作一个用于存放 rootfs 的引导 U 盘。
将 U 盘格式化为 EXT4 文件系统,并将下载到的压缩包解压,将 rootfs_debian10 中的全部内容放入 U 盘中。用于启动的 U 盘就制作完成了。(最好在 *NIX 环境中制作)

0x02 上传需要的文件至计算器

1.将从 tiplanet 上下载到的 linuxloader2 二进制文件用传输软件放到计算器的 /ndless/ 文件夹中,并修改 ndless 配置文件使其默认用 linuxloader2 打开 .ll2 文件
2.在计算器上创建 /linux/ 文件夹;将压缩包内的 zImage 重命名为 zImage.tns,将你使用的计算器型号对应的 dtb 文件重命名为 nspire.dtb.tns 并将它们上传到计算器的 /linux/ 文件夹上
3.制作用于启动的 ll2 脚本。在电脑上新建一个文件,键入以下内容:

保存并重命名为 load.ll2.tns 并上传至计算器 /linux/ 文件夹

0x03 在计算器上启动 Linux

在计算器上点击 load.ll2,计算器会自动使用 linuxloader2 启动 Linux 系统。

0x04 效果展示

1.欢迎来到 Debian 10 ~

2.例行 screenfetch (运行的是自己编译的 linux 4.4.15 内核)

3.lsusblsmod,此时已经加载 MT7601U无线网卡的驱动了

4.iwconfig 信息

5.ping 测试网络是否连通

6.喜闻乐见的 htop

7.legacy.cnvintage.org 效果(中文乱码, locale-gen 编译失败因此无法解决)
233

Kindle 折腾笔记

久违的更一片博客
RT,前几天重新买了一块泡面盖(划掉)Kindle Paperwhite 3。下面是上手以后的例行折腾。
开机,系统版本 5.9.2 ,下载书伴上的 5.9.6.1 版本特质固件下载地址并更新,更新完毕后登录自己的 Amazon 帐号,并在根目录建立 update.bin.tmp.partial 文件夹,防止其连接网络后自动更新。
第二步,下载 kindle-jb-factory 并在系统搜索栏键入 ;installHtml 完成越狱。
第三步,安装 hotfix 保证升级固件后保持越狱。
后面就简单了,安装 KUAL KOReader USBNet KTerm等插件,例行折腾就结束了。
最后上图
<code>cpunfo</code> , 还是那颗祖传的i.MX 6 Sololite

ssh到自家NAS,十分舒适

BZOJ 1858 [SCOI2010] 序列操作

本来想用线段树做,但是考虑到用线段树的话pushup,pushdown函数有点复杂…
看到题目有覆盖操作立刻想到了珂朵莉树,于是现学了一波然后改了一下模板A了这道题。
(珂学是个好东西)
(刷这道题全程循环夢違科(珂)学世紀2333333)

Luogu 4932 浏览器

这道题是某次 Luogu 月赛的题目。关于这道题的代码,非常神奇的是,这是比赛时某学长看到管理员提交记录的编译信息中含有一句神奇的内建函数 __builtin_popcount() ,然后根据那句话反推出来的。(喂喂喂这算作弊吧)
下面是 GNU 对这个函数的定义

然后是代码

Luogu 2783 有机化学之神偶尔会做作弊

去年NOIP之前做的,人生中第一道黑题,真是可喜可贺可喜可贺(虽然参考了题解)
Tarjan缩点重新构图,然后统计题目给定两点的树上距离即可。
上代码

BZOJ 1067 [SCOI2007]降雨量

todolist清理计划–;
很久很久以前暑假留的作业= =
将年份离散化,用线段树简单的维护最值,然后依照提议判断就好。