无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 13618|回复: 46
打印 上一主题 下一主题

[求助] GRUB2 音量键切换启动顺序 【哪位大神看看如何获取键值、修改?】

[复制链接]
跳转到指定楼层
1#
发表于 2014-9-3 13:22:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 carbonjiao 于 2014-9-10 10:29 编辑

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

点评

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=378645&extra=  发表于 2016-7-6 22:12
混沌剑神 www.aoswx.com/book/991.html 永生之门www.gmwxw.com/book/4185.html  发表于 2014-9-26 16:03
推荐
 楼主| 发表于 2014-9-3 16:44:45 | 只看该作者
如下对应?
key 102   HOME              0x66
key 115   VOLUME_UP     0x4d
key 114   VOLUME_DOWN       0x4c
key 116   POWER             0x4e
回复

使用道具 举报

3#
 楼主| 发表于 2014-9-3 16:05:45 | 只看该作者
查看 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;
复制代码
回复

使用道具 举报

4#
 楼主| 发表于 2014-9-3 16:35:48 | 只看该作者
找到 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 文件呢?
回复

使用道具 举报

5#
 楼主| 发表于 2014-9-3 16:49:33 | 只看该作者
对应修改为?
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

。。。


回复

使用道具 举报

6#
 楼主| 发表于 2014-9-3 17:03:49 | 只看该作者
哪位有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

回复

使用道具 举报

7#
发表于 2014-9-3 20:13:51 | 只看该作者
出错了:

../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

点评

出错是因为我直接注释掉了几个键值冲突的值 GRUB_KEYBOARD_KEY_END GRUB_KEYBOARD_KEY_NPAGE GRUB_KEYBOARD_KEY_DELETE 麻烦帮忙用附件再替代重新编译看看, 感谢了。。。。。。。。。。。  详情 回复 发表于 2014-9-3 23:09
6楼的下载地址中,grub2.00源码,删除了附加的 windows live linux installer 菜单,同时外置了分辨率设置。重新编译后,应该可以达到目的吧? 出错的原因,应该是用附件修改过的文件替换 include/grub/keyboard_la  详情 回复 发表于 2014-9-3 22:58
回复

使用道具 举报

8#
发表于 2014-9-3 22:58:17 | 只看该作者
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的缘故吧?
回复

使用道具 举报

9#
 楼主| 发表于 2014-9-3 23:08:28 | 只看该作者
出错是因为我直接注释掉了几个键值冲突的值
GRUB_KEYBOARD_KEY_END
GRUB_KEYBOARD_KEY_NPAGE
GRUB_KEYBOARD_KEY_DELETE

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

keyboard_layouts.7z

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

回复

使用道具 举报

10#
 楼主| 发表于 2014-9-3 23:09:30 | 只看该作者
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

回复

使用道具 举报

11#
发表于 2014-9-4 11:50:21 | 只看该作者
Try it !!!

winly-2.00.7z

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

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

点评

大神,能帮忙编译各异x86的版本么,我自己虚拟机ubuntu怎么也编译不了啊。我看的是神雕的教程,用mkia32efi.sh,试了其它的也没成功,难道编译efi还要其他的东西吗  详情 回复 发表于 2014-9-9 09:28
非常感谢。。。  详情 回复 发表于 2014-9-4 12:27
回复

使用道具 举报

12#
 楼主| 发表于 2014-9-4 12:27:40 | 只看该作者

非常感谢。。。
回复

使用道具 举报

13#
发表于 2014-9-9 09:28:18 | 只看该作者

大神,能帮忙编译各异x86的版本么,我自己虚拟机ubuntu怎么也编译不了啊。我看的是神雕的教程,用mkia32efi.sh,试了其它的也没成功,难道编译efi还要其他的东西吗

点评

结果: for i386-pc  详情 回复 发表于 2014-9-9 11:22
回复

使用道具 举报

14#
发表于 2014-9-9 11:22:39 | 只看该作者
xswxm 发表于 2014-9-9 09:28
大神,能帮忙编译各异x86的版本么,我自己虚拟机ubuntu怎么也编译不了啊。我看的是神雕的教程,用mkia32e ...

结果:

for i386-pc

booti386.efi.7z

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

点评

请问音量键修改了吗?  详情 回复 发表于 2014-9-9 11:25
回复

使用道具 举报

15#
发表于 2014-9-9 11:25:24 | 只看该作者
zsjyzx 发表于 2014-9-9 11:22
结果:

for i386-pc

请问音量键修改了吗?

点评

改了!你可试试.  详情 回复 发表于 2014-9-9 11:43
回复

使用道具 举报

16#
发表于 2014-9-9 11:43:33 | 只看该作者
xswxm 发表于 2014-9-9 11:25
请问音量键修改了吗?

改了!你可试试.

点评

神雕的源码:http://burg4dos.googlecode.com/svn/grub-2.00.tar.xz  详情 回复 发表于 2014-9-9 11:53
音量键没反应,还是要上下移动,而且没中文支持貌似,你试试看改改神雕的包看  详情 回复 发表于 2014-9-9 11:51
回复

使用道具 举报

17#
发表于 2014-9-9 11:51:32 | 只看该作者
zsjyzx 发表于 2014-9-9 11:43
改了!你可试试.

音量键没反应,还是要上下移动,而且没中文支持貌似,你试试看改改神雕的包看
回复

使用道具 举报

18#
发表于 2014-9-9 11:53:02 | 只看该作者

点评

再一次: 试后反馈。  详情 回复 发表于 2014-9-9 12:44
回复

使用道具 举报

19#
发表于 2014-9-9 12:44:07 | 只看该作者
xswxm 发表于 2014-9-9 11:53
神雕的源码:http://burg4dos.googlecode.com/svn/grub-2.00.tar.xz

再一次:

试后反馈。

booti386.7z

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

结果

点评

可以进入,中文可以显示,但还是不能用音量键等切换菜单。我自己理解可能有几种情况: 1. 主板的bios对这些按键不支持(可能么)。 2. kl文件按键修改无效 3. kl文件中key值修改(up、down把volup、voldown给覆盖  详情 回复 发表于 2014-9-9 13:06
回复

使用道具 举报

20#
发表于 2014-9-9 13:06:31 | 只看该作者
zsjyzx 发表于 2014-9-9 12:44
再一次:

试后反馈。

可以进入,中文可以显示,但还是不能用音量键等切换菜单。我自己理解可能有几种情况:
1. 主板的bios对这些按键不支持(可能么)。
2. kl文件按键修改无效
3. kl文件中key值修改(up、down把volup、voldown给覆盖了,导致只有按up、down才有反应)

点评

需要再研究下源码,看如何改键值 。。。  详情 回复 发表于 2014-9-9 18:01
回复

使用道具 举报

21#
 楼主| 发表于 2014-9-9 18:01:47 | 只看该作者
本帖最后由 carbonjiao 于 2014-9-9 18:31 编辑
xswxm 发表于 2014-9-9 13:06
可以进入,中文可以显示,但还是不能用音量键等切换菜单。我自己理解可能有几种情况:
1. 主板的bios对 ...


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

回复

使用道具 举报

22#
 楼主| 发表于 2014-9-10 13:34:58 | 只看该作者
再细看了下 grub2的代码,发现其layout键值跟android 和标准键值不是一套系统。。。
回复

使用道具 举报

23#
发表于 2014-11-2 19:57:14 来自手机 | 只看该作者
include/grub/keyboard_layouts.h 里面键码可以达到目的
回复

使用道具 举报

24#
发表于 2014-11-2 19:57:46 来自手机 | 只看该作者
请教楼主,上面这个文件在哪里找到?
回复

使用道具 举报

25#
发表于 2014-11-2 20:00:54 来自手机 | 只看该作者
只能找到key*.mod的文件
回复

使用道具 举报

26#
发表于 2014-11-2 20:15:58 来自手机 | 只看该作者
关于GNU 官网下的GRUB2的问题20 在GNU官网下的GRUB2里.只是源码什么的.不像已经编译好的有 grub 和grub.cfg文件之类..究竟要怎么弄才行.听说要编译..本人愚钝..望高手能祥说..是在这里下载的: ftp://ftp.gnu.org/gnu/grub 上图. 另外,GRUB.CFG文件里.启动某一系统时.怎么对其加密.就像GRUB4DOS里加个password=123456这样..求教了..
回复

使用道具 举报

27#
发表于 2014-11-2 20:17:13 来自手机 | 只看该作者
根据上面这个,莫非要去官网下载源码,修改后再编译出有grub.cfg的
回复

使用道具 举报

28#
发表于 2014-11-2 20:19:31 来自手机 | 只看该作者
楼主可否发一下你弄好的grub2文件夹(32位的)

点评

还没成功,做出来的文件,跟普通标准版没啥区别。。。 可能键码等不同,或者 那些键在 grub2下 还没驱动。。。  详情 回复 发表于 2014-11-17 09:52
回复

使用道具 举报

29#
 楼主| 发表于 2014-11-17 09:52:16 | 只看该作者
ricky384 发表于 2014-11-2 20:19
楼主可否发一下你弄好的grub2文件夹(32位的)

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

可能键码等不同,或者 那些键在 grub2下 还没驱动。。。
回复

使用道具 举报

30#
发表于 2014-12-12 19:42:10 | 只看该作者
        0x80        Keyboard Volume Up
        0x81        Keyboard Volume Down
不确定硬件码是否这几个
我觉得应该添加进去然后定义hotkey实现比较合理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-19 18:21

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表