巨款购买手机K20P
路由器,机顶盒,都玩腻了,现在轮到手机了。
首先要庆祝一下,我也是个米粉了现在,巨款259.00元包邮入手 红米K20 Pro 配置是: 晓龙855 12+512G




项目地址
https://github.com/GengWei1997/linux-xiaomi-raphael-uboot/tree/master
刷机前(解锁bootloader)
- 注册一个小米账号
- 官网下载
miflash_unlock_7.6.727.43.zip(里面有驱动,手动安装) - 解锁 bootloader (重点,手机要插小米账号那个sim卡,关闭wifi,然后在手机解锁界面绑定),否则出下图

- 绑定后,就可以成功解锁了,不用等几天。

刷机中
按官网 https://github.com/GengWei1997/linux-xiaomi-raphael-uboot/tree/master 步骤,
其中adb fastboot 在 https://dl.google.com/android/repository/platform-tools-latest-windows.zip 下载
# 1. 进入 Fastboot 模式
adb reboot bootloader ## 用 `下按键+pwr按键` 也一样的。
# 2. 擦除分区
fastboot erase dtbo
fastboot erase boot
fastboot erase cache
fastboot erase userdata
# 3. 刷入 boot 镜像
fastboot flash cache xiaomi-k20pro-boot.img
fastboot flash boot u-boot.img
# 4. 刷入系统镜像(需要先解压 rootfs.7z)
fastboot flash userdata rootfs.img ##这里文件太大
# 5. 重启设备
fastboot reboot
遇到问题
fastboot flash userdata rootfs.img libc++abi: terminating due to uncaught exception of type std::bad_alloc: std::bad_alloc
方案:转换为稀疏镜像(老师给我的版本)
# 安装工具
sudo apt install android-tools-fsutils
# 转换
img2simg rootfs.img rootfs_sparse.img
# 回到 Windows 用 fastboot 刷入
fastboot.exe flash userdata rootfs_sparse.img

ssh 修复
- osc 导致
SecureCTR无法正常使用
# 删除软链接,创建同名空文件
rm /etc/profile.d/80-systemd-osc-context.sh
touch /etc/profile.d/80-systemd-osc-context.sh
chmod -x /etc/profile.d/80-systemd-osc-context.sh
安装docker
# 安装依赖
apt update
apt install -y ca-certificates curl gnupg
# 添加 Docker GPG 密钥
install -m 0755 -d /usr/share/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker.gpg
chmod a+r /usr/share/keyrings/docker.gpg
# 添加 Docker 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" | tee /etc/apt/sources.list.d/docker.list
# 安装
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 检查版本和是否可以运行
docker --version
docker run hello-world
- 设置自启动
systemctl enable docker
systemctl start docker
##普通用户可以访问
usermod -aG docker user
IO测试
dd if=/dev/zero of=./testfile bs=1G count=10 oflag=direct && dd if=./testfile of=/dev/null bs=1G count=10 && rm ./testfile

CPU测试 Coremark
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 87142.805272 / GCC13.2.1 20240309 -O2 -DMULTITHREAD=8 -DUSE_FORK -DPERFORMANCE_RUN=1 -lrt / Heap / 8:Fork
| 芯片soc | 内核数 | 多核跑分 | 备注 |
|---|---|---|---|
| mt7981 | 2 | 8914 | RAX3000M |
| s905l3b | 4 | 16000 | 移动盒子 功耗1.2瓦 |
| ipq8071 | 2 | 18000 | |
| ipq6000 | 4 | 20658 | 亚瑟 |
| intel 1037U | 2 | 23170 | |
| IPQ6010 | 4 | 24160 | 太乙.雅典娜 |
| s905l3a | 4 | 24286 | 移动盒子 功耗1.2瓦 |
| mt7986 | 4 | 27226 | |
| RK3566 | 4 | 27692 | JPTV |
| intel J1900 | 4 | 34060 | 蜗牛星际 |
| RK3399 | 6 | 32548 /37428(openwrt) | |
| 骁龙855 | 8 | 87142 | (ubuntu26) |
网速测试
docker run --rm \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e PASSWORD=123456 \
-p 3000:80 \
lscr.io/linuxserver/librespeed:latest
通过局域网 http://ip:30000
系统相关信息
sys_info
#!/bin/bash
# 通过 CPU part 识别型号
get_cpu_model() {
PART=$(grep 'CPU part' /proc/cpuinfo | head -1 | awk '{print $NF}')
case $PART in
0x804|0x805) echo "Qualcomm Snapdragon 865 (Kryo 585)" ;;
0x802|0x803) echo "Qualcomm Snapdragon 845 (Kryo 385)" ;;
0xd44) echo "ARM Cortex-A76" ;;
0xd03) echo "ARM Cortex-A53" ;;
*) echo "Unknown (CPU part: $PART)" ;;
esac
}
# 最大主频
get_max_freq() {
MAX=0
for f in /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq; do
VAL=$(cat $f 2>/dev/null)
[ "$VAL" -gt "$MAX" ] && MAX=$VAL
done
awk -v f=$MAX 'BEGIN{printf "%.0fMHz", f/1000}'
}
echo ""
echo "系统: $(. /etc/os-release && echo "$PRETTY_NAME") ($(uname -m))"
echo "CPU型号: $(get_cpu_model)"
echo "CPU核心: $(nproc) 核 (小核x4 Kryo585 Silver + 大核x4 Kryo585 Gold)"
echo "CPU主频: $(get_max_freq)"
echo "内存: $(free | awk 'NR==2{printf "%.1fGB / %.1fGB", $3/1024/1024, $2/1024/1024}')"
echo "存储: $(df -h / | awk 'NR==2{printf "%s / %s", $3, $2}')"
echo ""
BAT=/sys/class/power_supply/qcom-battery
CAPACITY=$(cat $BAT/capacity)
FULL=$(cat $BAT/charge_full_design)
echo "===== 电池 ====="
echo "电量: ${CAPACITY}%"
echo "状态: $(cat $BAT/status)"
echo "电压: $(awk '{printf "%.3fV", $1/1000000}' $BAT/voltage_now)"
echo "电流: $(awk '{printf "%.1fmA", $1/1000}' $BAT/current_now)"
echo "温度: $(awk '{printf "%.1f°C", $1/10}' $BAT/temp)"
echo "设计容量: $(awk -v f=$FULL 'BEGIN{printf "%dmAh", f/1000}')"
echo "剩余容量: $(awk -v cap=$CAPACITY -v full=$FULL 'BEGIN{printf "%.0fmAh / %dmAh (%d%%)", cap*full/1000/100, full/1000, cap}')"
echo ""
echo "===== CPU温度 ====="
echo "小核簇: $(awk '{printf "%.1f°C", $1/1000}' /sys/class/thermal/thermal_zone5/temp)"
echo "大核簇: $(awk '{printf "%.1f°C", $1/1000}' /sys/class/thermal/thermal_zone6/temp)"
for zone in 1 2 3 4 7 8 9 10 11 12 13 14; do
TYPE=$(cat /sys/class/thermal/thermal_zone${zone}/type)
TEMP=$(cat /sys/class/thermal/thermal_zone${zone}/temp)
awk -v t=$TEMP -v name=$TYPE 'BEGIN{printf "%-26s %.1f°C\n", name, t/1000}'
done
echo ""
echo "===== GPU温度 ====="
echo "gpu: $(awk '{printf "%.1f°C", $1/1000}' /sys/class/thermal/thermal_zone15/temp)"
echo ""

查看防火墙状态
# 查看 ufw 状态和已开放端口
ufw status verbose
开放 3000-5000 端口
# TCP
ufw allow 3000:5000/tcp
# UDP
ufw allow 3000:5000/udp
# 重载生效
ufw reload
验证
ufw status verbose | grep 3000
如果 ufw 未启用
# 查看状态
ufw status
# 启用(注意:启用前确保 SSH 端口已放行,否则会断连)
ufw allow 22/tcp
ufw enable