Ubuntu Windows双系统和USB无线网卡安装的正确方法

在这篇文章中,我将分享我最近安装双系统和USB无线网卡的经历。这个过程既有快乐,也有痛苦,但最终结果是美好的。我希望通过这篇文章能够给大家带来一些帮助。

  1. 双系统安装
    在安装双系统之前,我建议先了解一些概念,并花一些时间来规划磁盘分区,不要急于行动。否则可能会遇到很多挫折,导致安装失败,甚至可能导致数据丢失。在网上可以找到很多关于双系统安装的指南,但其中质量参差不齐。我在这里分享一个可靠的链接作为实际操作指南:cnblogs.com/masbay/p/10745170.html。这篇文章写得很详细,理解之后按照步骤进行操作即可。

在这里,我想强调几点:
a.了解你的电脑型号
如果你的电脑是老款,即MBR + 单硬盘,而近几年购买的电脑基本上都是UEFI新式 + 双硬盘(SSD固态硬盘 + HDD机械硬盘)。我们不需要关心两者的区别,只需要知道自己的BIOS类型即可。
如果是UEFI BIOS,那么肯定支持EFI格式分区引导加载。EFI分区不需要太大,一般200MB左右,用于存储加载程序和驱动程序。如果你只安装了一个Windows系统,比如Windows 10,那么你的电脑上已经存在一个EFI格式的分区,即Windows在安装时会分配大约100MB的分区来存储Windows Boot Loader引导程序。如果你要安装双系统,我们还需要预留一个100MB以上的空间(分区格式为EFI格式)来存放双系统的引导程序。

b.双系统磁盘分区分配
Windows的C盘和D盘可能是FAT32或NTFS格式,而Linux下是ext4格式。一般情况下,双系统的磁盘是不共享的,Windows无法访问ext4格式的磁盘分区,同样,Linux也无法访问Windows的磁盘文件。
假设你的原系统只有C盘和D盘两个分区,为了防止安装Linux系统(如Ubuntu)导致D盘数据丢失,可能需要使用磁盘分区工具进行分割,比如Windows 10的磁盘管理工具或WinPE的磁盘分区工具。
在上面的操作指南中提到,我们需要预留一个200MB的空闲分区,用于Ubuntu系统的安装,并将其设置为引导分区。此外,我们还需要在HDD中的剩余空间中划分出一个内存的两倍大小的空间作为虚拟内存swap。再分配一些独立的分区用于存放Ubuntu系统文件,一般挂载在/根路径下,格式为ext4,相当于Windows下的C盘。最后,再分配一些空间用于存放用户数据,一般挂载在/home路径下,格式为ext4,相当于Windows下的D盘。
具体的分区分配可以参考上述操作指南。至此,双系统安装的简单介绍就到这里。

  1. USB无线网卡安装
    在Ubuntu下安装USB无线网卡驱动有一定的典型性,很可能你也会遇到和我一样的问题。

假设你已经成功安装了双系统,Windows和Ubuntu都可以正常启动,但在Ubuntu下面临一个令人头疼的问题:无法连接到无线网络,无法识别无线网卡。而且电脑所在的房间无法使用有线网络,怎么办呢?

实际上,无法识别无线网卡是正常的,因为这个无线网卡需要插入USB驱动才能使用。那么第一个想法肯定是寻找驱动程序。有没有简单一些的方法呢?为此,我尝试了几种方法。

a.尝试安装网卡驱动
尝试1:在Ubuntu的软件和更新中查找附加驱动,但没有找到,尝试失败。
尝试2:找到购买时附带的驱动光盘,但打开后发现只有Windows的驱动,尝试失败。
尝试3:根据产品型号搜索,果然在官网中找到了Linux驱动压缩包,但打开后发现需要编译源代码,并且官方网站上说只支持2.x内核,而我安装的是最新的Ubuntu,内核版本是5.4.0-41-generic。考虑到目前没有其他好办法,我尝试了编译,但编译后报错:函数不存在。根据错误信息简单搜索了一下,发现需要修改源代码。我曾考虑过修改源代码,但停下来想了一下,如果这样做,成功的概率可能不大,而且可能会陷入无尽的调试中,而且我对C语言也不是很熟悉,所以我决定先放一放,看看是否有其他解决办法。

尝试4:最后,这个方法证明是可行的…

b.成功安装Realtek 802.11n NIC驱动
1.执行lsusb命令,查看网卡的详细信息,如下所示:

$ sudo modprobe 8812au
modprobe: ERROR: could not insert '8812au': Operation not permitted

Realtek 802.11n NIC是我的无线网卡名称,也是比较常见的无线网卡。但奇怪的是,官方网站竟然不支持它。

2.根据网卡信息搜索网卡驱动的安装方法。通过搜索”Realtek 802.11n NIC”找到了一个比较可靠的答案,链接如下:

cnblogs.com/idorax/p/12369624.html
github.com/gnab/rtl8812au(驱动地址)

是的,我的无线网卡和这位网友的一样。感谢在GitHub上活跃的各位开发者,按照博文的步骤进行操作,一切看起来都很顺利。但很遗憾,执行到最后一步”sudo modprobe 8812au”时报错,如下所示:

#!/bin/bash
name="Kernel Modules Signing"
out_dir='/root/module-signing'
sudo mkdir ${out_dir}
sudo openssl 
   req 
   -new 
   -x509 
   -newkey 
   rsa:2048 
   -keyout ${out_dir}/MOK.priv 
   -outform DER 
   -out ${out_dir}/MOK.der 
   -days 36500 
   -subj "/CN=${name}/"
sudo chmod 600 ${out_dir}/MOK*

3.解决往内核添加模块操作不被允许的问题。即解决”modprobe: ERROR: could not insert ‘8812au’: Operation not permitted”权限不足的问题。出现这个错误首先想到的是是否没有用户执行权限,但很明显不是,因为我们已经使用了sudo。然后我在网上搜索了一下,大部分方法都无效,但最后我还是找到了一篇博文给出了原因和解决方案,链接如下:

amefs.net/archives/2003.html

操作不被允许的真正原因是:本地编译创建的驱动缺少签名,系统认为是可疑的,所以禁止modprobe操作(insmod也不行)。为了系统安全,我们需要启用secure boot。如果此时执行sudo modprobe 8812au操作,则可能无法正常执行。

找到原因后,接下来就很容易解决了。由于启用secure boot时,系统禁止加载所有无签名的驱动,因此需要对这些驱动进行签名。为了生成签名,我们首先需要生成私钥和证书,然后使用私钥和证书对驱动进行签名。

私钥和签名生成的脚本如下:

sudo mokutil --import /root/module-signing/MOK.der

我们还需要使用MOK(Machine-Owner Key),MOK是Machine-Owner Key的缩写,通过添加MOK证书,可以实现与OEM和系统厂商一样的对驱动签名管理的能力。我们需要使用mokutil工具添加新生成的证书。在这个过程中,我们需要两次输入管理密码,并在MOK管理界面使用该密码。

$ sudo /usr/src/linux-headers-5.4.0-41-generic/scripts/sign-file sha512 /root/module-signing/MOK.priv /root/module-signing/MOK.der $(modinfo -n /lib/modules/5.4.0-41-generic/kernel/drivers/net/wireless/8812au.ko

执行成功后,重新启动电脑,进入MOK管理平台,按照链接中的操作写入Enroll MOK,并启动Ubuntu。

最后,给驱动程序签名,如下所示:

$ sudo openssl rsa -in /root/module-signing/MOK.priv -out /root/module-signing/MOK.priv.unsecure

很不幸,还是失败了,报了这个错误:”PEMreadbio_PrivateKey:bad password read in…”。

一开始我也感到困惑,因为没有地方要求输入密码,为什么会报密码错误呢?

实际上,我们在生成私钥和证书时被要求输入密码,因此在使用私钥时也需要输入密码。但是在给驱动程序添加签名时,并没有要求我们输入密码,但是却报告了”bad password”错误。我尝试使用下面的命令,用新生成的无需密码的私钥替换原来需要密码的私钥。

$ sudo /usr/src/linux-headers-5.4.0-41-generic/scripts/sign-file sha512 /root/module-signing/MOK.priv.unsecure /root/module-signing/MOK.der $(modinfo -n /lib/modules/5.4.0-41-generic/kernel/drivers/net/wireless/8812au.ko)

然后,使用无需密码的私钥给驱动程序添加签名:

$ sudo modprobe 8812au 

执行成功!最后,再次执行内核添加模块的命令。

cdlinux怎么安装网卡驱动

成功了!非常高兴,现在Ubuntu右上角有了wifi图标,输入密码就可以正常上网了。祝您使用愉快!

参考资料:
cnblogs.com/masbay/p/10745170.html
cnblogs.com/idorax/p/12369624.html
github.com/gnab/rtl8812au
amefs.net/archives/2003.html
blog.csdn.net/buster2014/article/details/50921390

赞(0)