type
status
date
summary
slug
tags
category
icon
password

前言

手里有把 MCHOSE G75 Pro 键盘,功能、声音什么的都挺好,就一个非常脑瘫的问题,MacOS 下要按出来 F1-F12 必须得 Fn + F? , 还不支持反转,这不是糖吗?凭什么 MacOS 用户按 F1-F12 就得按两下,Windows 就只用按一下,问客服也说只能这样。
notion image
我就这样用了大概有一年,直到昨天晚上,我突发觉得我必须解决这个问题,我要改掉它,于是就有了下面的内容。

提取固件

为了提取固件,我费了很大力气把键盘壳撬开里面主控应该是 BYK916 ,搜索了一下总结下来这个芯片用的是 8051 指令集,而且大概率是 Sinowealth SH68F90A 这款芯片的换皮。
notion image
然后,我继续搜怎么提取固件,就搜到了 sinowealth-kb-tool 这个工具,可以直接通过 USB 对固件进行读取、刷写。
根本不用拆开键盘,更不用把自己的三模切换开关撬碎 😭😭
sinowealth-kb-tool
carlosslessUpdated Jan 3, 2026
看一下 vendor_id 和 product_id
notion image
 

固件分析、Patch

参考当年分析 iMK 键盘思路,尝试直接硬搜按键映射矩阵,
最终搜索 00 00 00 29 00 00 00 35 (0x29 代表 esc)、(0x35 代表 ~/`)找到了 4 组
notion image
然后发现 0xb400 和 0xcc00 内容完全一样,对照键位都是 windows 的键位,而 0xb600 和 0xce00 内容完全一样,对照键位都是 macos 的键位。
后面分析了很久的代码,以为会像 iMK 那个一样会有针对 fn 层的专门的处理,决定 fn + ? 输出什么,但我在 int0 的按键扫描处理逻辑中并没有发现这样的东西(虽然我也没完全看明白,但是我就看到它一直在查表)我就想是不是还会有别的表呢。
我就又用 read_keyboard_map 往后读了 0xb800 的,发现还真是 windows 的 fn 层的映射矩阵。于是我得到了
地址
长度
含义
0xb400/0xcc00
0x200
windows layer 0
0xb600/0xce00
0x200
macos layer 0
0xb800/0xd000
0x200
windows layer fn
0xba00/0xd200
0x200
macos layer fn
那还扯啥呢?
然后写回去即可