คนในอนาคตที่มีปัญหาเดียวกัน
ฉันพบว่าปัญหาคืออะไร การ์ด WIFI ของฉันคือ MediaTek Wi-Fi 6 MT7921 ซึ่งปัจจุบันรองรับโดยเคอร์เนล linux 5.16 ได้รับการสนับสนุนต่ำโดยเคอร์เนล 5.13 ซึ่งเป็นเคอร์เนลที่มาพร้อมกับ Ubuntu 21.10 ของฉันใช้งานได้จริงในการบู๊ตครั้งแรกได้ไม่ดีนัก และการบู๊ตครั้งถัดไปจะไม่ทำงานเลย
ดังนั้นวิธีแก้ไขคืออัปเกรดเป็นเคอร์เนลใหม่ด้วยคำสั่ง:
# ดาวน์โหลดไฟล์เคอร์เนล ส่วนหัว โมดูล...ฯลฯ
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16/amd64/linux-headers-5.16.0-051600_5.16.0-051600.202201092355_all.deb
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16/amd64/linux-headers-5.16.0-051600-generic_5.16.0-051600.202201092355_amd64.deb
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16/amd64/linux-image-unsigned-5.16.0-051600-generic_5.16.0-051600.202201092355_amd64.deb
wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.16/amd64/linux-modules-5.16.0-051600-generic_5.16.0-051600.202201092355_amd64.deb
ตอนนี้ติดตั้งเคอร์เนลในระบบของคุณ:
sudo dpkg -i *.deb
แก้ไขการพึ่งพาที่เสียหาย:
sudo apt ติดตั้ง -f
คุณสามารถรีบูตได้ทันที และอาจใช้งานได้หากคุณไม่ได้ใช้เซฟบูต
อย่างไรก็ตาม หากคุณเป็นเช่นนั้น คุณต้องปิดการใช้งานหรือลงชื่อเคอร์เนลด้วยตัวคุณเอง
ฉันทำตามนี้ แนะนำ.
แต่ขั้นตอนพื้นฐานของการลงชื่อเคอร์เนลคือ:
ทำการเรียกไฟล์ mokconfig.cnf
พร้อมข้อความว่า
# คำจำกัดความนี้จะหยุดบรรทัดต่อไปนี้ที่ล้มเหลวหาก HOME ไม่ใช่
#กำหนด.
หน้าแรก = .
RANDFILE = $ENV::HOME/.rnd
[ ต้องการ ]
Distinuous_name = req_distinuous_name
x509_extensions = v3
string_mask = utf8 เท่านั้น
พรอมต์ = ไม่
[ ชื่อเรียกซ้ำ ]
ชื่อประเทศ = <รหัสประเทศของคุณ>
stateOrProvinceName = <สถานะของคุณ>
localityName = <เมืองของคุณ>
0.organizationName = <องค์กรของคุณ>
CommonName = คีย์การลงนามการบูตที่ปลอดภัย
ที่อยู่อีเมล = <อีเมลของคุณ>
[ v3 ]
subjectKeyIdentifier = แฮช
AuthorityKeyIdentifier = keyid:always,isuer
ข้อจำกัดพื้นฐาน = สำคัญ CA:FALSE
ExtendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment = "ใบรับรองที่สร้างโดย OpenSSL"
ไฟล์ <> ส่วนที่มีข้อมูลของคุณ ตรวจสอบให้แน่ใจว่าใช้อักขระสองตัวสำหรับประเทศ รัฐ และเมืองเท่านั้น เช่น US CA LA
สร้างรหัสสาธารณะและส่วนตัวสำหรับการลงนามเคอร์เนล:
openssl req -config ./mokconfig.cnf \
-ใหม่ -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-คีย์เอาท์ "MOK.priv" \
-ออก "MOK.der"
แปลงคีย์เป็นรูปแบบ PEM ด้วย (mokutil ต้องการ DER, sbsign ต้องการ PEM):
opensl x509 - ใน MOK.der - แจ้ง DER - ออก PEM - ออก MOK.pem
ลงทะเบียนคีย์เพื่อการติดตั้งชิมของคุณ:
sudo mokutil -- นำเข้า MOK.der
รีสตาร์ทระบบของคุณ คุณจะพบหน้าจอสีน้ำเงินของเครื่องมือที่เรียกว่า MOKManager เลือก "ลงทะเบียน MOK" จากนั้นเลือก "ดูคีย์" ตรวจสอบให้แน่ใจว่าเป็นรหัสของคุณที่คุณสร้างขึ้นในขั้นตอนที่ 2 หลังจากนั้นดำเนินการต่อและคุณต้องป้อนรหัสผ่านที่คุณให้ไว้ในขั้นตอนที่ 4 ดำเนินการต่อด้วยการบูตระบบของคุณ
ตรวจสอบว่าคีย์ของคุณลงทะเบียนผ่าน:
sudo mokutil --รายการลงทะเบียน
ลงชื่อเคอร์เนลที่ติดตั้งของคุณ (ควรอยู่ที่ /boot/vmlinuz-[KERNEL-VERSION]:
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface. ลงนาม
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
sudo ปรับปรุงด้วง
ตอนนี้คุณสามารถรีบูต =)