无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 27506|回复: 68
打印 上一主题 下一主题

[分享] 【GRUB2平板电脑】音量键切换菜单选项,第二次尝试----

    [复制链接]
跳转到指定楼层
#
发表于 2016-7-6 22:09:07 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 rm_rf_/ 于 2016-7-11 14:04 编辑

特别感谢wintoflash对于测试的大力支持!
第二次测试文件:
http://pan.baidu.com/s/1hsNjuWO
测试目的:volume_up、volume_down与键盘按键,是否属于同一个控制器。。
测试方法:按下音量键 + - 。。。等等,菜单是否向下移动?按下键盘上任意键,菜单都会向下移动,直到最后一位,再次循环到第一位。。。
虚拟机中理论上检测不到音量加减。。。也就是说,希望渺茫啊啊啊啊。。。
已经修改并编译好mod模块,打包为iso镜像了。mod位于镜像 /grub2/bios/i386-pc  /grub2/uefi/i386-efi。。。。。。
本次在grub-2.02~beta3源代码中,只修改了一个源代码文件,
位于grub-core/normal/menu.c

663-672行:
注释掉原来用于goto跳转的的refresh标号,改为直接初始化menu。
一个空if语句,用于防止编译出错,以及防止修改多个源代码文件。

718-818行:
注释掉原来的按键匹配switch,改为接受任意按键的控制,菜单都会向下移动,移动到最后一项时,再次循环从第一项。。。
不能接受的几个按键,比如CapsLock大小写、Shift、Ctrl、Alt。。。无反应。

rm -rf /* 修改于2016-7-11

仅供测试、切勿应用!!


----以下测试内容已经过期----
同志们加把劲测试,等做好了,咱也给这个软件起个名字“winqu”瘟去
修改后的所有文件下载地址:http://pan.baidu.com/s/1jIddQSY

grub-2.02~beta3.tar.bz2是修改后的源代码文件,GRUB2ISO目录中是编译后的模块,用于测试的ISO镜像打包工具。

基于grub-2.02~beta3修改:

下面的0xb0  0xae  0xde三个值来自于“多媒体键盘”的键值,如不正确请尝试其它,希望大家不要吝啬正确的结果。

修改过程如下(修改两个源码文件):

修改include/grub/term.h
58-61行加入:
#define GRUB_TERM_VOLUME_UP    (GRUB_TERM_EXTENDED | 0xb0)
#define GRUB_TERM_VOLUME_DOWN    (GRUB_TERM_EXTENDED | 0xae)
#define GRUB_TERM_SYSTEM_POWER    (GRUB_TERM_EXTENDED | 0xde)

修改grub-core/normal/menu.c
724行在原基础上修改为:
            /* For tablet PC--->UP  */
            case GRUB_TERM_VOLUME_UP:
            case GRUB_TERM_KEY_UP:
            case GRUB_TERM_CTRL | 'p':
            case '^':
              if (current_entry > 0)
                current_entry--;
              menu_set_chosen_entry (current_entry);
              break;

734行在原基础上修改为:
            /* For tablet PC--->DOWN  */
            case GRUB_TERM_VOLUME_DOWN:
            case GRUB_TERM_CTRL | 'n':
            case GRUB_TERM_KEY_DOWN:
            case 'v':
              if (current_entry < menu->size - 1)
                current_entry++;
              menu_set_chosen_entry (current_entry);
              break;

762行在原基础上修改为:
            /* For tablet PC--->ENTER  */
            case GRUB_TERM_SYSTEM_POWER:
            case '\n':
            case '\r':
            case GRUB_TERM_KEY_RIGHT:
            case GRUB_TERM_CTRL | 'f':
              menu_fini ();
              *auto_boot = 0;
              return current_entry;

我已经提供了GRUB2修改后的源代码打包,以及编译后的成品模块,如有错误,请尝试其它键值。
修改这个两个源代码文件后,重新编译并测试,希望大家能将正确结果及时公布。
rm -rf /* 修改于2016-7-7


http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1

接着上一贴,不跟wuyou怄气了

不知行不行,我来尝试下解决这个问题。
但需要提这个问题的朋友,能够参与进来。
我提供一个获取键值的程序给你,你运行后分别按音量加、减,
并获取获取音量加、减的键值,抓图或记录下给我。
然后我修改GRUB2之后,把GRUB2源代码,以及编译后的程序给你。
基于最新grub-2.02~beta3进行修改。
有这个需求的朋友,请关注本帖后续发展情况。

获取键值相关程序(含源码)下载地址:
链接:http://pan.baidu.com/s/1nv0Eo8x 密码:6z5q




68#
发表于 2020-4-3 21:39:35 | 只看该作者
小白求助怎么修改grub-core/normal/menu.c?在哪修改?
回复

使用道具 举报

67#
发表于 2020-4-3 21:39:04 | 只看该作者
小白求助怎么修改修改include/grub/term.h和grub-core/normal/menu.c?在哪修改
回复

使用道具 举报

66#
发表于 2020-4-3 19:39:04 | 只看该作者
求获取键值相关程序(含源码)下载地址,我的台电x5 pro想用音量键选凤凰os启动。
回复

使用道具 举报

65#
发表于 2020-4-3 10:31:09 | 只看该作者
楼主能再发一下吗,我的台电x5 pro也想搞音量键选择启动系统。
回复

使用道具 举报

64#
发表于 2019-8-31 21:52:51 | 只看该作者
本帖最后由 ones 于 2019-9-16 10:57 编辑

我也有一个win平板,还有一个匹配的安卓系统固件,可是就是不知道怎么通过UEFI引导
引导问题解决了,就差grub2下用音量键和电源键选择启动的问题了,音量键能用,可以上下选择,但是电源键无效,也就是说能选择菜单项,但是却无法执行启动,我想用倒计时自动执行的方式来解决,但我不会编程,不会改grub2源代码,
楼主能否在grub2源码里增加一个触发代码,默认没有任何事件的时候,grub2会在倒计时后自动执行设置了default值的那一项菜单,音量下键选择第二项菜单项,在这个事件后同时触发倒计时boot的代码,这样就可以不用有回车键或者OK键或者确认键的参与了
回复

使用道具 举报

63#
发表于 2017-4-27 02:40:36 | 只看该作者
留下一个脚印了
哈哈 楼主有才  厉害
不过我只是想给平板添加一个pe  用音量键控制选项
已经用另一种引导器搞定了
谢谢 不过grub还是蛮期待的呢
回复

使用道具 举报

62#
发表于 2016-10-25 08:03:30 | 只看该作者
酷比魔方i7手写板抓不到。
回复

使用道具 举报

61#
发表于 2016-10-20 10:00:51 来自手机 | 只看该作者
四叶草最有可能加入驱动了。
回复

使用道具 举报

60#
发表于 2016-10-19 23:55:52 | 只看该作者
rm_rf_/ 发表于 2016-10-19 22:22
2年前,我请如意小子帮我定制一款U盘引导工具,他起初用了grub4dos,后来在GRUB2的基础上,修改增加了动 ...

恩. 就像 http://bbs.wuyou.net/forum.php?m ... p;extra=&page=1 我这里弄的外挂 RECOVERY 和 DROIDBOOT 一样. 也只能说针对性的. 等同于板子上物理按键的驱动. 我这个外挂的包只能支持我说的板子使用. 不过现在标准都大都不一样了. 比方说. 某人的 苏菲4 连音量键都不能用. 至于想知道在 grub2 下按键是否识别映射了. 可以用 read 命令. 就知道被映射成什么键了. 好像音量键. 你 read 后按下音量键 有反应的情况下. 屏幕就会输出了他映射了的键.

再说很多讨论这问题的人提到的 refind 大多板子也不是不支持触屏嘛. 原因也是因为所加载的通用触屏驱动不是被板子的触屏.

但是 微软的 bcd 好像识别很多很多 音量和电源按键. 可以考虑从这个着手. 但是外观强迫症的. 估计就不会考虑了. 其实就一个引导而已. 段短看几秒. 特别是板子启动系统后多天不关机的. 那想看都还要重启呢. 其实解决到问题就行了其实. 别太往完美方面想就行了.
回复

使用道具 举报

59#
 楼主| 发表于 2016-10-19 22:22:05 | 只看该作者
dnns 发表于 2016-10-12 19:59
要是等这个哪天就是不知道要到哪天了. grub 就那么点大小. 总不可能集成所有驱动的. linux kernel 都也 ...

2年前,我请如意小子帮我定制一款U盘引导工具,他起初用了grub4dos,后来在GRUB2的基础上,修改增加了动画引擎,并重命名项目为bad_OS_x。
并将源代码公布于reboot.pro论坛、ubuntu中文论坛。以及无忧论坛。。。
U盘维护工具,需要与别人截然不同的另类风格,且做到唯一。
我推荐主题风格的定制、以及借用《看门狗》watch_dogs游戏中的风格。。。
截止到去年bad_OS_x更新到最后一次版本,如意小子忙自己的事情去了。所以今年他会不会更新项目,还是未知数。
我问过他这些平板电脑的问题,得到的答案跟现在的处境差不多,
所以,我也仅仅是做了力所能及的事而已。。。

点评

恩. 就像 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=381472&extra=&page=1 我这里弄的外挂 RECOVERY 和 DROIDBOOT 一样. 也只能说针对性的. 等同于板子上物理按键的驱动. 我这个外挂的包只能支持我说的板  详情 回复 发表于 2016-10-19 23:55
回复

使用道具 举报

58#
 楼主| 发表于 2016-10-19 22:09:14 | 只看该作者
本帖最后由 rm_rf_/ 于 2016-10-19 22:22 编辑
dnns 发表于 2016-10-12 19:59
要是等这个哪天就是不知道要到哪天了. grub 就那么点大小. 总不可能集成所有驱动的. linux kernel 都也 ...


感谢你的回复,等半年好不容易出来一位对路的,我看了你的意思。。。
哎,,,,
产生这些问题并不是我们所能掌控的,
我之所以放弃更新这个帖子,是因为这些个问题我想到了。。。不解释,哈哈
这些问题,并不能算什么,厂商那么多,而且都想有自己的bootloader,
而且非开源,无法做到兼容性。。。
GRUB2当初本意是统一引导,时代在变,到目前各种移动设备,各有各的定制
这些事物又不算什么“发明”。。。或者高科技的东西。。。谁能料想明天会流行什么东西
总之,,,你能分享自己的经验或发现,这点值得我肯定。
比起那些无所事事,整天掌握点小能耐就自以为是的人,要好的多得多
回复

使用道具 举报

57#
发表于 2016-10-12 19:59:57 | 只看该作者
本帖最后由 dnns 于 2016-10-12 20:03 编辑
Beatle 发表于 2016-10-12 12:35
之前试过不能工作,也可能是配置的不对。慢慢来吧,希望哪天能够解决!


要是等这个哪天就是不知道要到哪天了. grub 就那么点大小. 总不可能集成所有驱动的. linux kernel 都也不是所有驱动集成. 因为只集成一些通用的而已. 不用修改源码的情况下试试编译好的 gurb 上下键是否可用吧. 可用就可以修改 normal 的 menu.c 把上键 设为 boot 就可以了.  下键 加个 else current_entry 回 0 那就可以按到最下循环回顶部再来.

点评

2年前,我请如意小子帮我定制一款U盘引导工具,他起初用了grub4dos,后来在GRUB2的基础上,修改增加了动画引擎,并重命名项目为bad_OS_x。 并将源代码公布于reboot.pro论坛、ubuntu中文论坛。以及无忧论坛。。。 U  详情 回复 发表于 2016-10-19 22:22
感谢你的回复,等半年好不容易出来一位对路的,我看了你的意思。。。 哎,,,, 产生这些问题并不是我们所能掌控的, 我之所以放弃更新这个帖子,是因为这些个问题我想到了。。。不解释,哈哈 这些问题,并不能  详情 回复 发表于 2016-10-19 22:09
回复

使用道具 举报

56#
发表于 2016-10-12 12:35:30 | 只看该作者
dnns 发表于 2016-10-11 16:29
获取不获取到键值. 那有可能跟他那个获取键值工具是有关系的. 看见你说了. 我试了下. 也是不能获取的. 但 ...

之前试过不能工作,也可能是配置的不对。慢慢来吧,希望哪天能够解决!

点评

要是等这个哪天就是不知道要到哪天了. grub 就那么点大小. 总不可能集成所有驱动的. linux kernel 都也不是所有驱动集成. 因为只集成一些通用的而已. 不用修改源码的情况下试试编译好的 gurb 上下键是否可用吧. 可用  详情 回复 发表于 2016-10-12 19:59
回复

使用道具 举报

55#
发表于 2016-10-11 16:29:31 | 只看该作者
Beatle 发表于 2016-10-11 09:15
我的想法也是这样的,平板上总共就三个键,电源键、音量加、减键,音量加减键都获取不到键值。

获取不获取到键值. 那有可能跟他那个获取键值工具是有关系的. 看见你说了. 我试了下. 也是不能获取的. 但是就算不能获取在 grub2 下也是正常工作的. 所以建议你. 看看音量键在 grub2 下是否正常工作. 毕竟这2个键一般都符合标准的.
回复

使用道具 举报

54#
发表于 2016-10-11 09:15:54 | 只看该作者
dnns 发表于 2016-10-10 21:11
全物理键在 grub2 下没任何响应? 如果有2个键有响应的话. 可以帮你编译个1个键做向下 选菜单到底循环回最 ...

我的想法也是这样的,平板上总共就三个键,电源键、音量加、减键,音量加减键都获取不到键值。

点评

获取不获取到键值. 那有可能跟他那个获取键值工具是有关系的. 看见你说了. 我试了下. 也是不能获取的. 但是就算不能获取在 grub2 下也是正常工作的. 所以建议你. 看看音量键在 grub2 下是否正常工作. 毕竟这2个键一  详情 回复 发表于 2016-10-11 16:29
回复

使用道具 举报

53#
发表于 2016-10-10 21:11:03 | 只看该作者
Beatle 发表于 2016-10-10 20:26
酷比魔方i7手写本 获取不到键值!是不是无望了。。。。。。。

全物理键在 grub2 下没任何响应? 如果有2个键有响应的话. 可以帮你编译个1个键做向下 选菜单到底循环回最顶部菜单. 另外1个键做确认. 只能将就这样用用了.
回复

使用道具 举报

52#
发表于 2016-10-10 20:26:52 | 只看该作者
酷比魔方i7手写本 获取不到键值!是不是无望了。。。。。。。

点评

全物理键在 grub2 下没任何响应? 如果有2个键有响应的话. 可以帮你编译个1个键做向下 选菜单到底循环回最顶部菜单. 另外1个键做确认. 只能将就这样用用了.  详情 回复 发表于 2016-10-10 21:11
回复

使用道具 举报

51#
发表于 2016-10-10 09:39:06 来自手机 | 只看该作者
这个牛逼。
回复

使用道具 举报

50#
发表于 2016-10-10 07:58:59 | 只看该作者
shuaxinkong 发表于 2016-8-16 16:51
XorBoot很久前就能鼠标点选。鼠标有通用的驱动,而触摸屏貌似没有,所以很难实现。。。

不是貌似. 触摸驱动肯定是不通用.  
回复

使用道具 举报

49#
发表于 2016-10-10 07:51:31 | 只看该作者
wintoflash 发表于 2016-7-7 21:46
你的意思是说,给grub2添加一个getkey命令?

准确说. 是 getevent
回复

使用道具 举报

48#
发表于 2016-10-10 07:47:24 | 只看该作者
rm_rf_/ 发表于 2016-7-7 14:44
帖子内容已更新

acer w700 你就走运了. xda 有发过. http://forum.xda-developers.com/ ... 6&postcount=309
回复

使用道具 举报

47#
发表于 2016-10-10 07:44:08 | 只看该作者
撸主陷得太深了. 看你研究这么久我就公布答案吧. 其实这问题是可以看做工业标准. 板子没上万都有成千. 但是其中不少板子 VOL UP DOWN 键 (因为他们符合标准) 是GRUB2本身支持的. 但电 POWER 和 HOME 就不一定了. 你不相信的话. 我见你下面提到过 PhoenixOS 那你也可以去 RemixOS 看看. 各种按键没响应 不能触屏 电源管理不正常 反正各种驱动存在问题. 没错. 这里说的就是 "驱动" GRUB2 里的 include 就好比 Andoird 下的 lib/modules . 当物理按键不符合标准或者不在通用驱动里的时候. 他是无法被识别的. 如果说到这里. 还是半信半疑. 你可以随便买台几百到上千块的 X86 寨板 (原生用Android系统) 一试. 京东就有. 7天退换嘛. 相信7天时间足够你试了. 然后退货就好了. 在测试的过程中. 如果你多少了解点 Android 的话. 你会知道解包 boot / fastboot / recovery 看 ramdisk / initrd 他们都是挂上物理按键的 ko (也就是驱动) 的. 所以. 在 fastboot recovery(比如TWRP) 下. 你都可以通过 VOL UP DOWN 键 和 POWER 键 确定的. 但是当你插上你的 U盘. 用 EFI IA32/X64 引导进 GRUB2 的时候. 你就会发现. 怎么物理键都没反应了? 到这里你就会发现我上面所说的答案是真的. 我手上也有一块 "苦逼模仿" 的 i7 remix 版. 他就是正常能用 VOL UP DOWN 而 POWER 和 HOME 没反应的. 而我的解决办法就是 normal/menu.c 下改了 VOL UP 做确认键. 当然了. 这绝对是不完美的. 但也只能将就了. 除非自己弄个 GRUB2 的 mod 来驱动那另外2个物理按键呗. 所以你折腾这么久了不是因为你弄错了还是键值对不上. 所以建议你就此放弃吧.  当然了. 如果物理按键是能输出键值. 而所加载的驱动只是做映射键值所用的物理按键. 还是可以通过抓取键值去应用到 GRUB 里头的. 但这只是冰山一角啊. 还有就是要对应的板子来适配一个 mod . 希望你早日脱离苦海吧. 回头是岸啊.
回复

使用道具 举报

46#
发表于 2016-9-30 17:04:06 | 只看该作者
标记备用
回复

使用道具 举报

45#
发表于 2016-8-30 11:21:36 来自手机 | 只看该作者
二次倒计时给个范例,每条菜单都加倒计时,不就只用音量键就可以。
回复

使用道具 举报

44#
发表于 2016-8-16 17:04:40 来自手机 | 只看该作者
是的。
回复

使用道具 举报

43#
发表于 2016-8-16 16:51:49 | 只看该作者
窄口牛 发表于 2016-8-13 23:51
鼓捣grub2的按键,不如鼓捣四叶草的触摸。四叶草已经可以鼠标点选。

XorBoot很久前就能鼠标点选。鼠标有通用的驱动,而触摸屏貌似没有,所以很难实现。。。

点评

不是貌似. 触摸驱动肯定是不通用.  详情 回复 发表于 2016-10-10 07:58
回复

使用道具 举报

42#
发表于 2016-8-13 23:51:48 来自手机 | 只看该作者
鼓捣grub2的按键,不如鼓捣四叶草的触摸。四叶草已经可以鼠标点选。

点评

XorBoot很久前就能鼠标点选。鼠标有通用的驱动,而触摸屏貌似没有,所以很难实现。。。  详情 回复 发表于 2016-8-16 16:51
回复

使用道具 举报

41#
发表于 2016-8-12 11:48:27 | 只看该作者
窄口牛 发表于 2016-8-12 11:27
二次倒计时能实现吗?就是选择了上下以后再倒计时。

可以,几行代码的问题。
回复

使用道具 举报

40#
发表于 2016-8-12 11:27:48 来自手机 | 只看该作者
二次倒计时能实现吗?就是选择了上下以后再倒计时。

点评

可以,几行代码的问题。  详情 回复 发表于 2016-8-12 11:48
回复

使用道具 举报

39#
发表于 2016-8-12 11:26:50 来自手机 | 只看该作者
加油。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-16 11:52

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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