バックグラウンド
Linux ブロック デバイス ドライバーがカーネル バージョン 5.15 でコンパイルされると、エラーが報告されます。したがって、次の 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 デバイスを再度マウントしようとすると、ブロック デバイスのパーティション タイプを指定する必要があることを示すプロンプトが表示されます。デバイスがフォーマットされていることを示します。
カーネルモジュールをアンロードする