无忧启动论坛

标题: GRUB2 音量键切换启动顺序 【哪位大神看看如何获取键值、修改?】 [打印本页]

作者: carbonjiao    时间: 2014-9-3 13:22
标题: GRUB2 音量键切换启动顺序 【哪位大神看看如何获取键值、修改?】
本帖最后由 carbonjiao 于 2014-9-10 10:29 编辑

为了使平板也用上grub2,是否可能编译grub2,使得可以通过Vol+ 和  Vol- 以及Power键 来选择启动到不同的菜单项?


作者: carbonjiao    时间: 2014-9-3 16:05
查看 grub2的源码, 初步估计通过修改 include/grub/keyboard_layouts.h 里面键码可以达到目的,
默认
  1. typedef enum grub_keyboard_key
  2.   {
  3.     GRUB_KEYBOARD_KEY_A = 0x04,
  4.     GRUB_KEYBOARD_KEY_B = 0x05,
  5.     GRUB_KEYBOARD_KEY_C = 0x06,
  6.     GRUB_KEYBOARD_KEY_D = 0x07,
  7.     GRUB_KEYBOARD_KEY_E = 0x08,
  8.     GRUB_KEYBOARD_KEY_F = 0x09,
  9.     GRUB_KEYBOARD_KEY_G = 0x0a,
  10.     GRUB_KEYBOARD_KEY_H = 0x0b,
  11.     GRUB_KEYBOARD_KEY_I = 0x0c,
  12.     GRUB_KEYBOARD_KEY_J = 0x0d,
  13.     GRUB_KEYBOARD_KEY_K = 0x0e,
  14.     GRUB_KEYBOARD_KEY_L = 0x0f,
  15.     GRUB_KEYBOARD_KEY_M = 0x10,
  16.     GRUB_KEYBOARD_KEY_N = 0x11,
  17.     GRUB_KEYBOARD_KEY_O = 0x12,
  18.     GRUB_KEYBOARD_KEY_P = 0x13,
  19.     GRUB_KEYBOARD_KEY_Q = 0x14,
  20.     GRUB_KEYBOARD_KEY_R = 0x15,
  21.     GRUB_KEYBOARD_KEY_S = 0x16,
  22.     GRUB_KEYBOARD_KEY_T = 0x17,
  23.     GRUB_KEYBOARD_KEY_U = 0x18,
  24.     GRUB_KEYBOARD_KEY_V = 0x19,
  25.     GRUB_KEYBOARD_KEY_W = 0x1a,
  26.     GRUB_KEYBOARD_KEY_X = 0x1b,
  27.     GRUB_KEYBOARD_KEY_Y = 0x1c,
  28.     GRUB_KEYBOARD_KEY_Z = 0x1d,
  29.     GRUB_KEYBOARD_KEY_1 = 0x1e,
  30.     GRUB_KEYBOARD_KEY_2 = 0x1f,
  31.     GRUB_KEYBOARD_KEY_3 = 0x20,
  32.     GRUB_KEYBOARD_KEY_4 = 0x21,
  33.     GRUB_KEYBOARD_KEY_5 = 0x22,
  34.     GRUB_KEYBOARD_KEY_6 = 0x23,
  35.     GRUB_KEYBOARD_KEY_7 = 0x24,
  36.     GRUB_KEYBOARD_KEY_8 = 0x25,
  37.     GRUB_KEYBOARD_KEY_9 = 0x26,
  38.     GRUB_KEYBOARD_KEY_0 = 0x27,
  39.     GRUB_KEYBOARD_KEY_ENTER = 0x28,
  40.     GRUB_KEYBOARD_KEY_ESCAPE = 0x29,
  41.     GRUB_KEYBOARD_KEY_BACKSPACE = 0x2a,
  42.     GRUB_KEYBOARD_KEY_TAB = 0x2b,
  43.     GRUB_KEYBOARD_KEY_SPACE = 0x2c,
  44.     GRUB_KEYBOARD_KEY_DASH = 0x2d,
  45.     GRUB_KEYBOARD_KEY_EQUAL = 0x2e,
  46.     GRUB_KEYBOARD_KEY_LBRACKET = 0x2f,
  47.     GRUB_KEYBOARD_KEY_RBRACKET = 0x30,
  48.     GRUB_KEYBOARD_KEY_BACKSLASH = 0x32,
  49.     GRUB_KEYBOARD_KEY_SEMICOLON = 0x33,
  50.     GRUB_KEYBOARD_KEY_DQUOTE = 0x34,
  51.     GRUB_KEYBOARD_KEY_RQUOTE = 0x35,
  52.     GRUB_KEYBOARD_KEY_COMMA = 0x36,
  53.     GRUB_KEYBOARD_KEY_DOT = 0x37,
  54.     GRUB_KEYBOARD_KEY_SLASH = 0x38,
  55.     GRUB_KEYBOARD_KEY_CAPS_LOCK  = 0x39,
  56.     GRUB_KEYBOARD_KEY_F1 = 0x3a,
  57.     GRUB_KEYBOARD_KEY_F2 = 0x3b,
  58.     GRUB_KEYBOARD_KEY_F3 = 0x3c,
  59.     GRUB_KEYBOARD_KEY_F4 = 0x3d,
  60.     GRUB_KEYBOARD_KEY_F5 = 0x3e,
  61.     GRUB_KEYBOARD_KEY_F6 = 0x3f,
  62.     GRUB_KEYBOARD_KEY_F7 = 0x40,
  63.     GRUB_KEYBOARD_KEY_F8 = 0x41,
  64.     GRUB_KEYBOARD_KEY_F9 = 0x42,
  65.     GRUB_KEYBOARD_KEY_F10 = 0x43,
  66.     GRUB_KEYBOARD_KEY_F11 = 0x44,
  67.     GRUB_KEYBOARD_KEY_F12 = 0x45,
  68.     GRUB_KEYBOARD_KEY_SCROLL_LOCK  = 0x47,
  69.     GRUB_KEYBOARD_KEY_INSERT = 0x49,
  70.     GRUB_KEYBOARD_KEY_HOME = 0x4a,
  71.     GRUB_KEYBOARD_KEY_PPAGE = 0x4b,
  72.     GRUB_KEYBOARD_KEY_DELETE = 0x4c,
  73.     GRUB_KEYBOARD_KEY_END = 0x4d,
  74.     GRUB_KEYBOARD_KEY_NPAGE = 0x4e,
  75.     GRUB_KEYBOARD_KEY_RIGHT = 0x4f,
  76.     GRUB_KEYBOARD_KEY_LEFT = 0x50,
  77.     GRUB_KEYBOARD_KEY_DOWN = 0x51,
  78.     GRUB_KEYBOARD_KEY_UP = 0x52,
  79.     GRUB_KEYBOARD_KEY_NUM_LOCK = 0x53,
  80.     GRUB_KEYBOARD_KEY_NUMSLASH = 0x54,
  81.     GRUB_KEYBOARD_KEY_NUMMUL = 0x55,
  82.     GRUB_KEYBOARD_KEY_NUMMINUS = 0x56,
  83.     GRUB_KEYBOARD_KEY_NUMPLUS = 0x57,
  84.     GRUB_KEYBOARD_KEY_NUMENTER = 0x58,
  85.     GRUB_KEYBOARD_KEY_NUM1 = 0x59,
  86.     GRUB_KEYBOARD_KEY_NUM2 = 0x5a,
  87.     GRUB_KEYBOARD_KEY_NUM3 = 0x5b,
  88.     GRUB_KEYBOARD_KEY_NUM4 = 0x5c,
  89.     GRUB_KEYBOARD_KEY_NUM5 = 0x5d,
  90.     GRUB_KEYBOARD_KEY_NUM6 = 0x5e,
  91.     GRUB_KEYBOARD_KEY_NUM7 = 0x5f,
  92.     GRUB_KEYBOARD_KEY_NUM8 = 0x60,
  93.     GRUB_KEYBOARD_KEY_NUM9 = 0x61,
  94.     GRUB_KEYBOARD_KEY_NUM0 = 0x62,
  95.     GRUB_KEYBOARD_KEY_NUMDOT = 0x63,
  96.     GRUB_KEYBOARD_KEY_102ND = 0x64,
  97.     GRUB_KEYBOARD_KEY_LEFT_CTRL = 0xe0,
  98.     GRUB_KEYBOARD_KEY_LEFT_SHIFT = 0xe1,
  99.     GRUB_KEYBOARD_KEY_LEFT_ALT = 0xe2,
  100.     GRUB_KEYBOARD_KEY_RIGHT_CTRL = 0xe4,
  101.     GRUB_KEYBOARD_KEY_RIGHT_SHIFT = 0xe5,
  102.     GRUB_KEYBOARD_KEY_RIGHT_ALT = 0xe6,
  103.   } grub_keyboard_key_t;
复制代码

作者: carbonjiao    时间: 2014-9-3 16:35
找到 kl文件键值如下

  1. key 102   HOME              WAKE
  2. key 115   VOLUME_UP         WAKE
  3. key 114   VOLUME_DOWN       WAKE
  4. key 116   POWER             WAKE
复制代码


如何修改 include/grub/keyboard_layouts.h 文件呢?
作者: carbonjiao    时间: 2014-9-3 16:44
如下对应?
key 102   HOME              0x66
key 115   VOLUME_UP     0x4d
key 114   VOLUME_DOWN       0x4c
key 116   POWER             0x4e
作者: carbonjiao    时间: 2014-9-3 16:49
对应修改为?
39.    GRUB_KEYBOARD_KEY_ENTER = 0x4e,    电源键 确认
77.    GRUB_KEYBOARD_KEY_DOWN = 0x4c,   音量-  向下
78.    GRUB_KEYBOARD_KEY_UP = 0x4d,    音量+   向上
40.    GRUB_KEYBOARD_KEY_ESCAPE = 0x66,   返回 键   ESC

。。。



作者: carbonjiao    时间: 2014-9-3 17:03
哪位有linux环境的大大能否帮忙用附件修改过的文件替换 include/grub/keyboard_layouts.h 来重新编译呢?

grub2.00源码、bios主板下的winlydr脚本mkldr-all.sh.zip、UEFI的64bit启动制作脚本等
下载地址:http://pan.baidu.com/s/1o6mIXOe

keyboard_layouts.7z

1.41 KB, 下载次数: 23, 下载积分: 无忧币 -2


作者: zsjyzx    时间: 2014-9-3 20:13
出错了:

../util/grub-mklayout.c:262:39: ??:'GRUB_KEYBOARD_KEY_END'???(?????)
../util/grub-mklayout.c:263:38: ??:'GRUB_KEYBOARD_KEY_NPAGE'???(?????)
../util/grub-mklayout.c:264:40: ??:'GRUB_KEYBOARD_KEY_DELETE'???(?????)
make[2]: *** [util/grub_mklayout-grub-mklayout.o] ?? 1
make[2]: ????"/var/tmp/grub-2.00/bin_pc"
make[1]: *** [all-recursive] ?? 1
make[1]: ????"/var/tmp/grub-2.00/bin_pc"
make: *** [all] 错误 2

作者: 青青草    时间: 2014-9-3 22:58
zsjyzx 发表于 2014-9-3 20:13
出错了:

../util/grub-mklayout.c:262:39: ??:'GRUB_KEYBOARD_KEY_END'???(?????)

6楼的下载地址中,grub2.00源码,删除了附加的 windows live linux installer 菜单,同时外置了分辨率设置。重新编译后,应该可以达到目的吧?
出错的原因,应该是用附件修改过的文件替换 include/grub/keyboard_layouts.h的缘故吧?
作者: carbonjiao    时间: 2014-9-3 23:08
出错是因为我直接注释掉了几个键值冲突的值
GRUB_KEYBOARD_KEY_END
GRUB_KEYBOARD_KEY_NPAGE
GRUB_KEYBOARD_KEY_DELETE

用附件这个新的代替看看,   感谢了。。。。

keyboard_layouts.7z

1.39 KB, 下载次数: 21, 下载积分: 无忧币 -2


作者: carbonjiao    时间: 2014-9-3 23:09
zsjyzx 发表于 2014-9-3 20:13
出错了:

../util/grub-mklayout.c:262:39: ??:'GRUB_KEYBOARD_KEY_END'???(?????)

出错是因为我直接注释掉了几个键值冲突的值
GRUB_KEYBOARD_KEY_END
GRUB_KEYBOARD_KEY_NPAGE
GRUB_KEYBOARD_KEY_DELETE

麻烦帮忙用附件再替代重新编译看看, 感谢了。。。。。。。。。。。

keyboard_layouts.7z

1.39 KB, 下载次数: 16, 下载积分: 无忧币 -2


作者: zsjyzx    时间: 2014-9-4 11:50
Try it !!!

winly-2.00.7z

1.61 MB, 下载次数: 12, 下载积分: 无忧币 -2

修改 keyboard_layouts.h后,编译的结果。


作者: carbonjiao    时间: 2014-9-4 12:27
zsjyzx 发表于 2014-9-4 11:50
Try it !!!

非常感谢。。。
作者: xswxm    时间: 2014-9-9 09:28
zsjyzx 发表于 2014-9-4 11:50
Try it !!!

大神,能帮忙编译各异x86的版本么,我自己虚拟机ubuntu怎么也编译不了啊。我看的是神雕的教程,用mkia32efi.sh,试了其它的也没成功,难道编译efi还要其他的东西吗
作者: zsjyzx    时间: 2014-9-9 11:22
xswxm 发表于 2014-9-9 09:28
大神,能帮忙编译各异x86的版本么,我自己虚拟机ubuntu怎么也编译不了啊。我看的是神雕的教程,用mkia32e ...

结果:

for i386-pc

booti386.efi.7z

539.69 KB, 下载次数: 25, 下载积分: 无忧币 -2


作者: xswxm    时间: 2014-9-9 11:25
zsjyzx 发表于 2014-9-9 11:22
结果:

for i386-pc

请问音量键修改了吗?
作者: zsjyzx    时间: 2014-9-9 11:43
xswxm 发表于 2014-9-9 11:25
请问音量键修改了吗?

改了!你可试试.
作者: xswxm    时间: 2014-9-9 11:51
zsjyzx 发表于 2014-9-9 11:43
改了!你可试试.

音量键没反应,还是要上下移动,而且没中文支持貌似,你试试看改改神雕的包看
作者: xswxm    时间: 2014-9-9 11:53
zsjyzx 发表于 2014-9-9 11:43
改了!你可试试.

神雕的源码:http://burg4dos.googlecode.com/svn/grub-2.00.tar.xz
作者: zsjyzx    时间: 2014-9-9 12:44
xswxm 发表于 2014-9-9 11:53
神雕的源码:http://burg4dos.googlecode.com/svn/grub-2.00.tar.xz

再一次:

试后反馈。

booti386.7z

538.5 KB, 下载次数: 25, 下载积分: 无忧币 -2

结果


作者: xswxm    时间: 2014-9-9 13:06
zsjyzx 发表于 2014-9-9 12:44
再一次:

试后反馈。

可以进入,中文可以显示,但还是不能用音量键等切换菜单。我自己理解可能有几种情况:
1. 主板的bios对这些按键不支持(可能么)。
2. kl文件按键修改无效
3. kl文件中key值修改(up、down把volup、voldown给覆盖了,导致只有按up、down才有反应)
作者: carbonjiao    时间: 2014-9-9 18:01
本帖最后由 carbonjiao 于 2014-9-9 18:31 编辑
xswxm 发表于 2014-9-9 13:06
可以进入,中文可以显示,但还是不能用音量键等切换菜单。我自己理解可能有几种情况:
1. 主板的bios对 ...


需要再研究下源码,看如何改键值 。。。
booti386.efi.zip (789.94 KB, 下载次数: 26)


作者: carbonjiao    时间: 2014-9-10 13:34
再细看了下 grub2的代码,发现其layout键值跟android 和标准键值不是一套系统。。。
作者: ricky384    时间: 2014-11-2 19:57
include/grub/keyboard_layouts.h 里面键码可以达到目的
作者: ricky384    时间: 2014-11-2 19:57
请教楼主,上面这个文件在哪里找到?
作者: ricky384    时间: 2014-11-2 20:00
只能找到key*.mod的文件
作者: ricky384    时间: 2014-11-2 20:15
关于GNU 官网下的GRUB2的问题20 在GNU官网下的GRUB2里.只是源码什么的.不像已经编译好的有 grub 和grub.cfg文件之类..究竟要怎么弄才行.听说要编译..本人愚钝..望高手能祥说..是在这里下载的: ftp://ftp.gnu.org/gnu/grub 上图. 另外,GRUB.CFG文件里.启动某一系统时.怎么对其加密.就像GRUB4DOS里加个password=123456这样..求教了..
作者: ricky384    时间: 2014-11-2 20:17
根据上面这个,莫非要去官网下载源码,修改后再编译出有grub.cfg的
作者: ricky384    时间: 2014-11-2 20:19
楼主可否发一下你弄好的grub2文件夹(32位的)
作者: carbonjiao    时间: 2014-11-17 09:52
ricky384 发表于 2014-11-2 20:19
楼主可否发一下你弄好的grub2文件夹(32位的)

还没成功,做出来的文件,跟普通标准版没啥区别。。。

可能键码等不同,或者 那些键在 grub2下 还没驱动。。。
作者: moltaxp    时间: 2014-12-12 19:42
        0x80        Keyboard Volume Up
        0x81        Keyboard Volume Down
不确定硬件码是否这几个
我觉得应该添加进去然后定义hotkey实现比较合理
作者: hehh2015    时间: 2015-12-23 18:01
如果能加载触屏的驱动就更完美了
作者: zysniu    时间: 2016-7-6 09:07
楼主 不知道你解决了没有 我看了一下
音量上的键值是0X30h (48) 175
音量下的键值是0X2Eh (46) 174
作者: rm_rf_/    时间: 2016-7-6 22:11
zysniu 发表于 2016-7-6 09:07
楼主 不知道你解决了没有 我看了一下
音量上的键值是0X30h (48) 175
音量下的键值是0X2Eh (46) 174

请看下这个:
http://bbs.wuyou.net/forum.php?m ... d=378645&extra=




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3