酷比魔方iwork1x i30双系统版,重装单Ubuntu 20.04系统记录(重力传感器、触摸屏、启动菜单、声卡问题、优化充电慢)

前言

几年前购买的这款平板电脑,平常看个网页还可以,但问题是存储空间严重不够用。一共是64G的eMMC,随着这几年win10不停的更新,到最后win10盘剩余空间只有几个G,加上如同鸡肋的安卓系统占用10G左右的空间,导致严重影响正常使用。工作主要用来远程改个代码,干脆改成Linux系统,速度快占用空间小。

重新安装系统

首先准备一张Ubuntu系统的安装U盘(最好制作一张Ubuntu/Win10/WinPE三启动U盘,接下来需要PE系统修复Win10启动),通过U盘启动系统(BIOS启动过程中按F7键),注意必须在开机白底选择系统界面,选择Win的状态下进行重启安装,如果开机选择安卓下重启安装,有些硬件不能被识别。

U盘启动进入Ubuntu安装画面后,画面是倒的,因为识别了重力传感器,但没设参数。通过选择左上角Gnome系统菜单旋转锁定后临时解决,后续会对重力传感器参数进行配置。

在Ubuntu分区选择界面删除所有分区。然后按顺序新建三个分区:

  1. EFI分区,60M,分大了没什么用。仅用作UEFI启动。
  2. 主分区,挂载点选‘/’,大小大约59个G。磁盘太小没必要分太多区。
  3. Swap,推荐分4个G。根据个人使用软件大小适当调整swap空间大小。

然后选择下一步安装,可以选择最小安装节约磁盘空间。因为你需要的软件都是可以通过apt在线按需安装,非常方便。

装好以后发现没法启动系统,不要慌,也不要选择安卓那个图标启动,要不BIOS配置变了,需要关机重启。按F7进入启动介质选择,里面多了一个“ubuntu”,选择这个进入系统。

重力传感器配置

新建文件/etc/udev/hwdb.d/61-sensor-local.hwdb,内容如下:

sensor:modalias:acpi:BOSC0200*:dmi:*:*
 ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1

注意第二行开头有个空格。重启验证一下效果。

无法自动引导问题

制作一张Win10 PE启动U盘,然后找其他电脑复制一份Win10的完整的winows目录进去(主要是满足bcdboot工具修复启动,理论上只需要几个特定文件就可以,但没找到资料需要的最小文件,我是通过官网下载酷比魔方的固件,然后通过解压缩软件WIN10/Images/install.wim里的windows目录,这个比较小)

通过F7键启动PE系统,然后打开磁盘管理,找到刚才分的EFI(或者叫ESP)分区,点右键分配一个盘符,比如“S:”。或者有DiskGenius等软件分配盘符更方便。

打开一个CMD,在命令行里输入:

BCDBOOT c:\WINDOWS /s s: /f UEFI

其中C:\Windows是刚刚复制过来的windows目录路径,S:是刚刚分配的EFI分区盘符。如果过程没问题,会提示成功。别着急重启。然后在文件管理器进入S盘,打开/EFI/Microsoft/Boot/,删除下面的所有文件和文件夹,再把/EFI/ubuntu下的所有文件复制到/EFI/Microsoft/Boot/,然后改名,grubx64.efi 为 bootmgfw.efi,完成偷梁换柱,启动win10变成启动ubuntu。重启。
应该能在开机统选择界面选择win系统来启动ubuntu的系统。

触摸屏驱动移植

复制一份我制作好的触摸屏固件到/lib/firmware/,再clone一份触摸屏驱动(或直接下载zip包):

git clone https://github.com/onitake/gslx680-acpi.git

复制gslx680-acpi到/usr/src/下,并改名为gslx680-acpi-0.2.1
如果dkms status报错,安装一下DKMS

sudo apt install dkms  //可选
//以下配置了DKMS
sudo dkms add gslx680-acpi/0.2.1
sudo dkms build gslx680-acpi/0.2.1
sudo dkms install gslx680-acpi/0.2.1

编辑sudo vim /etc/modprobe.d/blacklist.conf 在最下面加上一行

blacklist silead

禁用系统默认的触摸屏驱动。重启验证一下效果。

更新内核后声卡没有声音

卸载5.13或其他版本内核,更换为5.4版本内核,目前发现5.4版本是没问题的。

apt-cache search linux-image | grep 5.4|grep generic
//根据最新版本替换5.4.0-104
sudo apt install linux-image-5.4.0-104-generic linux-headers-5.4.0-104-generic linux-modules-extra-5.4.0-104-generic

卸载其他版本内核,释放eMMC空间。

充电速度太慢

经过观察PMIC AXP288的寄存器(Linux系统的好处是开源,找问题非常方便),酷比魔方iwork1x充电速度慢是因为官方设置的参数有些保守,导致很难进入快充状态,会发现消耗大于充电速度。实际是可以快充的,必须满足以下条件:

  1. 充电头支持BC1.2协议,满足sdp(500mA)、dcp(1500mA)、cdp(2000mA左右)
  2. 充电线必须足够粗,否则线路压降过大,低于4.6V也不能进入快充。

因为系统本身消耗的电流根据屏幕亮度是1000-1700mA,留给充电器的电流不多。不过可以通过一些手段绕过限制。

以下操作可能会造成充电头过热、损坏,或引发电脑损坏,最坏情况引发火灾。请确认充电头是正规厂家生产,且标注规格能提供足够(5V 2.5A或以上)的电流,另外充电线必须足够粗避免过热引起危险。如引起任何问题,本人不会承担责任。

以下方法也适合其他Intel Bay trail (BYT-CR) 和 Cherry trail (CHT-CR)平台,使用全志AXP288 PMIC的Atom平板,不过不同的硬件设计可能有限制,安全性请自行评估。目前发现在高CPU负载下充电会过热保护,建议关机充满电再使用。

新建两个脚本文件,一个用于查询正在充电的电流大小,另一个用于绕过检测机制进入快冲(在插入充电器的状态下运行,需要root权限加sudo,另外需要安装i2c工具“sudo apt install i2c-tools”)。所有状态在重启后会恢复默认值,不会保持,但关机会保持快充状态,插拔充电线也会导致部分设置失效。充电电压改为4.2V,电量只能到75%,长期保持充满4.35V可能有电池鼓包风险(三星note7就是4.4V高压电池,不过可能性不大,大可放心使用),适合长期插交流电使用电脑的场合。

batt_info.sh

#!/bin/bash

# 充电电流是正数说明正在充电,是负数说明正在放电
curr=$(cat /sys/bus/platform/drivers/axp288_fuel_gauge/axp288_fuel_gauge/power_supply/axp288_fuel_gauge/current_now)
let curr=curr/1000
echo "Batt Current: $curr mA"

volt=$(cat /sys/bus/platform/drivers/axp288_fuel_gauge/axp288_fuel_gauge/power_supply/axp288_fuel_gauge/voltage_now)
let volt=volt/1000
echo "Batt Voltage: $volt mV"

# 以下数值是根据充电头协议自动识别的结果
vbus_limit=$(cat /sys/bus/platform/drivers/axp288_charger/axp288_charger/power_supply/axp288_charger/input_current_limit)
let vbus_limit=vbus_limit/1000
echo "VBus Limit: $vbus_limit mA"

setbatt.sh

#!/bin/bash

checkbit(){
	[ $(( $1 & $(( 1 << $2 )) )) != 0 ]
}

ADDR="NONE"
for i in {0..15}
do
	if find /sys/devices/pci0000:00 | grep axp288_charger | grep -q i2c-$i/
	then
		export ADDR=$i
	fi
done
if [ "$ADDR" == "NONE" ];then
	echo "No AXP288 found.exit..."
	exit 1
fi
echo "Find AXP288 in i2c-$ADDR"

reg33=$(i2cget -f -y $ADDR 0x34 0x33)
if checkbit $reg33 7;then
	echo "Charging..."
else
        echo "Not in charge...exit"
        exit 2
fi

# 警告:确认充电头输出电流大于设定值,否则有损坏充电头的风险(查看充电头上的标识5V电压下的最大电流)
# Warning: confirm that the maximum output current of the AC adapter is greater than the set value, 
# otherwise there is a risk of damaging the adapter.
# 芯片能自动识别充电器最大电流,不过识别不一定准确,手动调整数值满足快速充电要求,充电线也要粗
vbus_limit=$(cat /sys/bus/platform/drivers/axp288_charger/axp288_charger/power_supply/axp288_charger/input_current_limit)
let vbus_limit=vbus_limit/1000
echo "Force setting VBus current limit $vbus_limit mA to 2500mA"
echo 2500000 > /sys/bus/platform/drivers/axp288_charger/axp288_charger/power_supply/axp288_charger/input_current_limit

# 设置vbus输入参数,输入最低限制电压和最高电流,之前由于电压限制过高导致充电速度慢,放宽到4.2V,限流值提高
# 默认0x32 4.6V 2A
# bit[5:3]:V_HOLD setting
# 000: 4.0V; 001: 4.1V; 010: 4.2V
# 011: 4.3V; 100: 4.4V; 101: 4.5V RW 0
# 110: 4.6V; 111: 4.7V
# bit[1:0]Current limit default when BC1.2 detection result is non SDP
# 00: 900mA
# 01: 1500mA
# 10: 2000mA
# 11: 2500mA
echo "Setting adapter voltage hold 4.2V, current limit 2.5A"
i2cset -f -y $ADDR 0x34 0x30 0x13

# LED指示灯设置,避免闪烁分散注意力^_^,长亮0x73 长灭0x43  默认0x6b
echo "Setting battery status LED"
i2cset -f -y $ADDR 0x34 0x32 0x43

# 设置充电器参数,电池电压改为4.2V(4.35V电池充满可能不安全,充到75%,适合长期插充电头的场合),充电电流加大
# 默认值0x67 4.35V 1.4A
# bit[6:5]Charger target voltage setting
# 00: 4.10V; 01: 4.15V; 10: 4.2V; 11: 4.35V
# bit[3:0]Charge Current setting
# 200mA-2.8A, 200mA/step, default is 1200mA, 14steps, 1110-1111 reserved.
echo "Setting charger target voltage 4.2V, charger current limit 2.6A"
i2cset -f -y $ADDR 0x34 0x33 0xcd

把setbatt.sh复制到一个目录里,比如/usr/local/bin下面,然后在/etc/udev/rules.d下新建一个文件,比如:98-power.rules

ACTION=="change", SUBSYSTEM=="power_supply", RUN+="/usr/local/bin/setbatt.sh"

注意最后要空一行。保存,然后执行sudo udevadm control --reload-rules。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值