Ubuntu は指定されたバージョンのカーネルを置き換えます

バックグラウンド

Linux ブロック デバイス ドライバーがカーネル バージョン 5.15 でコンパイルされると、エラーが報告されます。したがって、次の 2 つの方法があります。

  1. バージョンの変更に合わせてドライバー コードを変更する
  2. 下位バージョンのカーネルに切り替える

最初の方法は低すぎて選択できないため、
カーネルの低いバージョンに変更する必要がありましたが、考えてみると多くの問題に遭遇しました。

指定されたカーネルを置き換えます

具体操作:具体操作

バージョン 5.4.0 を例に挙げます

	wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh
	chmod +x ubuntu-mainline-kernel.sh
	sudo mv ubuntu-mainline-kernel.sh /usr/local/bin/

ここに画像の説明を挿入

必要なバージョンを検索して見つけます

	ubuntu-mainline-kernel.sh -r | grep 5.4

ここに画像の説明を挿入

そのバージョンのカーネルをインストールする

	ubuntu-mainline-kernel.sh -i v5.4.0

ここに画像の説明を挿入

グラブを更新する

	update-grub

リブート

	reboot now

ここに画像の説明を挿入

確認

	uname -r

ここに画像の説明を挿入

失敗しました。22.04 リリース バージョンには 5.4 バージョンのカーネルがインストールされており、機能していないようです。

次のコマンドを使用してカーネルを検索すると、バージョン 5.15 と 5.17 のみが表示されます。カーネルのバージョン 5.4.0 を強制的にダウンロードした後、再起動後にカーネルを置き換えることを選択できますが、システムに入ることができません。それで諦めざるを得ませんでした。

`apt-cache search linux-image-`

反省してみると、Linuxのカーネルバージョンとリリースバージョンについてまだ深く理解できていません。バージョン 5.4 は Ubuntu 20.04 で使用されるカーネルであり、バージョン 5.15 は Ubuntu 22.04 で使用されます。リリースバージョンごとにカーネルの修正が明らかに異なるため、22.04バージョンのUbuntuに5.4バージョンを強制的にインストールしたところ、システムがまったく起動できなくなりました。

Ubuntu 20.04 を試してみる

  • ISOファイルをダウンロードし、rootパスワードを設定します。

  • 拡張機能をインストールしてファイルやペーストボードの共有を実現
    拡張機能を直接インストールし、仮想マシンを再起動

  • 清華ミラーソース
    スイッチをルートに設定し、vim をダウンロードします

    su -

    apt-get vim
    

    バックアップソース

    	cp /etc/apt/sources.list /etc/apt/sources.list.bak
    

    手動置換またはコマンド置換

    vim /etc/apt/sources.list
    

    ミラーソース Web サイトにアクセスして、置換リストを見つけてください。

    更新する

    apt-get update
    

カーネルを再度変更してみてください

今回の Ubuntu バージョン 20.04 では、5.4 バージョンのカーネルが多数見つかります。

ここに画像の説明を挿入
今回はバージョン5.4.75を試します

ubuntu-mainline-kernel.sh -i v5.4.75

起動時にカーネルを選択するように grub ファイルを変更します。

vim /etc/default/grub

への変更:

	GRUB_HIDDEN_TIMEOUT=10
	#GRUB_STYLE_HIDDEN

更新-grub

update-grub

再起動して確認する

新しくインストールされたバージョン 5.4.75 カーネルを選択します

ここに画像の説明を挿入
現在のバージョンを確認すると、正常に置き換えられています。

uname -r

ここに画像の説明を挿入

開発ツールをインストールし、ブロックドライバーを再コンパイルします。

カーネルを交換した後も仮想マシン拡張機能が無効なままで、VboxGuest ディスクを削除して再インストールしても機能しません。
忘れてください

sudo apt-get install build-essential #安装开发工具包,包含gcc等

ヘッダーをインストールする

uname -r現在のカーネルのバージョンを確認する

apt search linux-headerソフトウェア ライブラリのヘッダー バージョンをすべて検索します

sudo apt-get install linux-headers-XXX-X-amd6ヘッダーをインストールする

さまざまなカーネル環境をインストールする

  sudo apt-get install kernel-package 
   #测试中会出现缺这缺那的情况,如以下包会丢失,如编译源码出现错误,可尝试执行
   sudo apt-get install flex bison 
   #和/或
   sudo apt-get install libssl-dev
   #和/或
   sudo apt-get install libelf-dev #libelf-devel or elfutils-libelf-devel
   #如仍未解决,可自行搜索或尝试解决方案
   
   #编译生成menuconfig配置内核界面所需文件(非必须)
   sudo apt-get install libncurses5-dev
   
   #开发版本管理及自动化包
   sudo apt-get install automake#此处可能会有版本号
   sudo apt-get install autoconf cvs subversion

ドライバーのコンパイルを開始します

sbullフォルダーに入り、

ここに画像の説明を挿入
コンパイルは一気に成功しましたが、どうやらカーネルのバージョンの問題のようです。

モジュールをインストールします: insmod sbull.ko

dmesg ビューログ

ここに画像の説明を挿入

モジュール情報の表示: lsmod

ブロックデバイス情報を表示するには、 sbull を参照してください
ここに画像の説明を挿入
: fdisk -l /dev/sbull

ここに画像の説明を挿入
ブロックデバイスのフォーマット: mkfs.ext4 /dev/sbulla


ここに画像の説明を挿入
ファイルシステムがジャーナルには小さすぎると表示されます。ブロック デバイスをマウントして使用する方法がわかりません。ブロック デバイスをマウントして使用した後、
ここに画像の説明を挿入
ここに画像の説明を挿入
このデバイスを使用して、他のハードディスクと同様にロード結果を表示できます
ここに画像の説明を挿入
。マウント
ここに画像の説明を挿入
して、使用法

カウントが 1 に変わっていることがわかります。
ここに画像の説明を挿入

ファイルを作成するデバイスを入力してください

ここに画像の説明を挿入

アンマウント後に再マウントする

ここに画像の説明を挿入

アンインストール後にデータが消えてしまったのですが、再マウントするとデータが復元されました。

ディスクをアンマウントする

ここに画像の説明を挿入
/mnt/sbull をアンマウントします。30 秒以上待った後、/dev/sbulla デバイスを再度マウントしようとすると、ブロック デバイスのパーティション タイプを指定する必要があることを示すプロンプトが表示されます。デバイスがフォーマットされていることを示します。

カーネルモジュールをアンロードする
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_51794847/article/details/128432277