联想legion R7000笔记本linux使用体验

联想legion R7000笔记本linux使用体验

这款笔记本使用linux最主要的问题在触控板

  1. 默认情况下可能会加载hid_generic和hid_multitouch两个驱动, 这两个驱动加载后触摸板无法使用,键盘可以正常使用

  2. 可以在/etc/modprobe.d/blacklist.conf文件里面加上blacklist hid_multitouch这行,这样触摸板和键盘可以使用, 触摸板会被识别为类似鼠标的情况, 无法使用双指滑动

  3. 默认的键盘使用的驱动是hid_generic, 看dmesg信息显示键盘是ITE的,我这把键盘修改为使用hid_ite驱动
    在drivers/hid/hid-ite.c文件中添加一行, 让键盘使用hid-ite驱动

static const struct hid_device_id ite_devices[] = {
	{ HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
        /* 添加下面一行 */
	{ HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE_LENOVO_LEGION_R7000) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_258A, USB_DEVICE_ID_258A_6A88) },

上面引用了一个常量,在drivers/hid/hid-ids.h文件里面定义

#define USB_VENDOR_ID_ITE               0x048d
#define USB_DEVICE_ID_ITE_LENOVO_YOGA   0x8386
#define USB_DEVICE_ID_ITE_LENOVO_YOGA2  0x8350
/* 我的键盘vid,pid是0x048d, 0xc100 添加下面一行 */
#define USB_DEVICE_ID_ITE_LENOVO_LEGION_R7000 0xc100
#define I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720	0x837a
#define USB_DEVICE_ID_ITE_LENOVO_YOGA900	0x8396
#define USB_DEVICE_ID_ITE8595		0x8595
  1. 触摸板的vendorID是0x06CB, 这个看着像是synaptics的, 搜了下似乎hid-rmi驱动比较像,就用这个测试下吧
    在drivers/hid/hid-rmi.c文件中添加一行, 让触摸板使用hid-rmi驱动
static const struct hid_device_id rmi_id[] = {
	{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14),
		.driver_data = RMI_DEVICE_HAS_PHYS_BUTTONS },
	{ HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_REZEL) },
        /* 添加了下面一行,让触摸板使用hid-rmi驱动 */
	{ HID_I2C_DEVICE(I2C_VENDOR_ID_SYNAPTICS, I2C_PRODUCT_ID_SYNAPTICS_SYNA7f28) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5),

上面引用了一个常量,在drivers/hid/hid-ids.h文件里面定义

#define I2C_VENDOR_ID_SYNAPTICS     0x06cb
#define I2C_PRODUCT_ID_SYNAPTICS_SYNA2393   0x7a13
/* 我的触摸板vid,pid是0x06cb, 0x7f28, 添加下面一行 */
#define I2C_PRODUCT_ID_SYNAPTICS_SYNA7f28   0x7f28
  1. 重新编译内核, 禁用hid-generic和hid-multitouch驱动,测试键盘和触摸板可以使用, 不过触摸板单击不太灵敏

禁用独立显卡
我个人非常讨厌nvidia的显卡的,笔记本就不该有nvidia的显卡,至少1660性能以下的独立显卡不应该存在
禁用显卡的方法:

  1. 可以重新编辑DSDT, 方法类似黑苹果,然后编译内核指定加载重新编译过的DSDT。 这种方式是比较好的,顺便还可以修正一些DSDT的问题, 不过比较麻烦,我采用第二种方式了
  2. 用acpi_call来在开机后禁用独显
    方法参考:https://wiki.archlinux.org/index.php/Hybrid_graphics
    程序下载地址:https://github.com/mkottman/acpi_call
    这里需要注意,在5.6内核有些变动, 原程序很久没有更新了,编译会报错, 可以参考这个pr修改:https://github.com/mkottman/acpi_call/pull/88

如果是自己重新编译内核的, 可以参考一些内核配置选项
CPU参考:https://wiki.gentoo.org/wiki/Ryzen
iwlwifi无线网卡参考:https://wiki.gentoo.org/wiki/Iwlwifi
amdgpu参考:https://wiki.gentoo.org/wiki/AMDGPU
声卡参考:https://wiki.gentoo.org/wiki/ALSA

联想legion R7000笔记本linux使用体验

上一篇:结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程


下一篇:link 和 @import的区别