Linuxカーネルソースディレクトリツリーのリテラシー分析
1. Linuxカーネルソースディレクトリツリーリテラシー分析:
sudo apt-get install tree
tree //查看目录树
約1.3wCファイル:1100w行のコード
Linuxはオープンソースで無料です。Linuxオープンソースコミュニティワーカーは共同で
Linuxをオープンソースとして維持し、マルチアーキテクチャとマルチプラットフォームコードをサポートし、非常に高い移植性を備えています。
しかし、Linuxカーネルは通常、いくつかのM ---- 4Mにコンパイルされます
マルチプラットフォームとマルチアーキテクチャをサポートしているため、コンパイルする前に構成し、使用するのに適したターゲットプラットフォームに構成する必要があります
。プラットフォーム:ARM(HiSilicon、Friendly Arm、Raspberry Pi、nanopi)X86 MIPS
ソースディレクトリツリーの構造を理解する
2. RaspberryPi関連の操作に適したLinuxカーネルを構成します。
作業するときは、ドライバーコードを記述してからドライバーコードをコンパイルする必要がありますが、ドライバーコードのコンパイルにはプリコンパイルされたカーネル、カーネルをコンパイルします構成する必要があります。
構成の最終目標は、.configファイルを生成します。このファイルは、Makefileに有用なものをカーネルに編成するように指示します。
製造元にはLinuxカーネルソースコードが装備されています。たとえば、Raspberry Piを購入すると、製造元からRaspberry Pi Linuxカーネルソース
コードが提供されます。ソースコードを取得すると、製造元のソースコードが含まれます。
最初の方法:
cp 厂家.config .config
find . -name *_defconfig
找到:
./arch/arm/configs/bcm2709_defconfig
2番目の方法:
make menuconfig //一项项配置,通常基于厂家的config来配置
3番目の方法:
メーカー自身の家族:すべて自分で行う
Linux Raspberry Piのカーネルを構成するにはどうすればよいですか?
方法1:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
//用来配置,指定编译器
このコマンドの機能は次のとおりです。bcm2709_defconfigの構成を.configに取得します。
プロジェクトで直接構成を使用できますが、この場合、元のRaspberryPiの構成が失われる可能性があります。現在使用中のRaspberryPiの構成を取得する方法を次に示します。
Manufacturer.configをconfigに変更することを実現します
方法2:必要なライブラリ
を
インストールするためのドライバを追加します。
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
インストール後:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
2つの読み込み方法を駆動します。
*:カーネルにコンパイルします----- zImageにはドライバーが含まれています。
M:ドライバファイルxxx.koは、システムの起動後、次のコマンドを使用してモジュールモードで生成されます。
inmosd xxx.ko 負荷
**方法3:**一時的に無視する
3. Linuxカーネルのコンパイル:
编译:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs 2>&1 | tee build.log
//arm架构,内核7,j4:指定用多少电脑资源编译,
//zImage:生成内核镜像
//modules:生成驱动模块
//dtbs:生成配置文件
nプロセスでコンパイルします。プロセス数が指定されていない場合、デフォルトで単一プロセスとしてコンパイルされます。
カーネルが正常にコンパイルされた後、ソースツリーにさらにvmlinuxがあることがわかります。失敗した場合、そのようなファイルはありません。
成功した後、zImageは私たちが必要とするターゲット画像です
cd arch/arm
cd boot
ls
3.LinuxカーネルイメージをRaspberryPiにコピーし、新しいカーネルを起動します:
zImageファイルをパックします。
linuxソースコードパッケージのツールを直接使用します。
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
このディレクトリに1つ生成しますkernel_new.imgファイル、このファイルはSDカードに配置されるファイルです。
注意:インターネット上の多くの場所で、tools / mkimage /imagetool-uncompressd.pyの使用は機能しないと言われています。!
画像をコピーし
ます。1。RaspberryPiの電源を切り、SDカードを引き出し、カードリーダーを使用してコンピューターを挿入し、仮想マシンに接続します。
dmesg //显示可移动设备信息
cd //回到根目录
mkdir data1
mkdir data2
//数据拷贝;创建两个文件夹,挂载U盘
sudo mount /dev/sdb1 data1//一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
sudo mount /dev/sdb2 data2//一个是ext4分区,也就是系统的根目录分区
// sudo umount /dev/sdb1 //取消挂载
//data1:U盘数据 data2:根目录数据
data2:
モジュールのインストール:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/dazai/data2 modules_install
デバイスドライバファイルをインストールします:hdmi interface usb WiFiioなど。
kernel.imgファイルを更新します。
注意:ミラー名:kernel7.img
cd data1
ls
//可以看到kernel7.img 文件
cp kernel7.img kernel7OLD.img//做一个备份
次に、新しく生成されたコンパイルをdata1にコピーし、次の名前を付けます。kernel7.img
cp kernel_new.img /home/dazai/data1/kernel7.img
md5sum kernel_new.img//检查cp是否成功
md5sum /home/dazai/data1/kernel7.img
コピーは成功しました。
他の関連ファイルをコピーします。
cp arch/arm/boot/dts/.*dtb* /home/dazai/data1/
cp arch/arm/boot/dts/overlays/.*dtb* /home/dazai/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/dazai/data1/overlays/
その後、UbuntuはSDカードの処理を切断し、キャプチャするためにWindowsに送信します。
復元:変更
後:SDカードをRaspberry Piに挿入し直し
、シリアルポートからログインして起動プロセスを監視し
、RaspberryPiターミナルに入ります。
uname -r
カーネルバージョンが変更されました。
Raspberry Piカーネルの構成、コンパイル、および移植は成功しました。
これらの操作は以下から生じます。
ドライバコードのコンパイルには、事前にコンパイルされたカーネルが必要です。