This service is available only in Japanese-language.
現在、以下のコマンドを用いて生成したSDKを用いて開発を行っています。
bitbake -c populate_sdk [ターゲット名]
アプリケーションのビルドに関しては、このSDKさえあればビルド可能です。
現在新規driverをkernelとは別に作成しています。
driverのビルドに関しては、SDKのみの用意ではビルドできず、
kernelをbitbakeした上で、makefileに以下のように記載しビルドしています。
KERNELSRCDIR = ../../build-openstlinuxweston-xxx/tmp-glibc/work-shared/xxx/kernel-build-artifacts
現在driverのビルドに関しても、SDKのみで行う方法がないかと考えているのですが、そのようなことは可能でしょうか。
yakuhito
2021/3/11 (木) 10:12
弊社の場合は
SDKを構築する際にkernel src は既に work-shared に展開済となっているため
別途kernel-srcをtarで固めておき、ドライバーを開発する際は、SDKとtarで固めた
ソースを展開して使用しています。
SDKの中にkernelソースを含める方法ですが、
TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc"
を追加することで、sdkインストール時のsysroot/[TARGET]/usr/src/linux
以下にファイルが展開されますが、現状MakefileとKconfig のみ
入っており、必要なソース(*.[ch])は入ってきませんですね。
他に指定を追加して、SDKにカーネルソースが含まれることが判れば
このスレッドにてお知らせします。
yakuhito
2021/3/11 (木) 11:23
IMAGE_INSTALL_append に記載すれば入りました
1. IMAGE_INSTALL_appen = " kernel-devsrc"
を追加して、-c populate_sdk を実行する。
2. 生成されたSDKをインストールする。
3. インストールしたSDKの環境設定ファイルを読み込む。
4. インストールしたSDKのsysroot/[TARGET]/usr/src/kernel に移動する
5. 一次的にソースツリーのownerをUSERに変更する
sudo chpwn -R $USER .
6. make scripts を実行する。
fatal error: openssl/bio.h: No such file or directory といったエラーが出る場合は
sudo apt install libssl-dev (ubuntuの場合)を実行して、opensslの開発パッケージを
ホスト側に追加する
7. ソースツリーのownerをrootに戻す
sudo chpwn -R root .
mackey
2021/3/12 (金) 12:41
kernel_devsrcが見つからないようです。
ご連絡いただきましたように、IMAGE_INSTALL_append = " kernel_devsrc"を追記しビルドを試みたのですが、
Missing for unbuildable dependency chain was: ['kernel_devsrc']と表示されビルドできません。
ひとまず最初にご連絡いただきました、srcもまた保持する方法にて対応しようと思いますが、
何か追加で情報ございましたらまたご連絡いただけますと幸いです。
参考:こちらの方法はopenstlinux-5.4-dunfell-mp1-20-06-24に適用しようとしています。
yakuhito
2021/3/12 (金) 15:10
meta/recipes-kernel/linux 以下にレシピが存在します
kernel_devsrc ではなく、kernel-devsrc となります。
別環境で実施した場合、IMAGEにも /usr/src/kernel が生成されるため、 SDK作成時のみ指定を行った方が
良さそうですね。
mackey
2021/3/15 (月) 08:48
ご回答いただきありがとうございます。
こちらの誤記載により、失礼いたしました。
ご連絡いただきました方法にてdriverビルドが可能なことを確認いたしました。
ご回答いただき、ありがとうございました。
mackey
2021/3/25 (木) 18:15
include/asmが見つかりません
ご連絡頂いた方法でドライバをビルドしていたのですが、以下のようなエラーが表示されました。
In file included from ./include/asm-generic/int-ll64.h:11,
from ./arch/arm/include/uapi/asm/types.h:5,
from ./include/uapi/linux/types.h:5,
from ./include/linux/types.h:6,
from ./include/linux/list.h:5,
from ./include/linux/module.h:9,
from (省略 記載したソースコード)
./include/uapi/asm-generic/int-ll64.h:12:10: fatal error: asm/bitsperlong.h: No such file or directory
12 | #include <asm/bitsperlong.h>
該当のSDK同梱のincludeフォルダを参照しますと、確かにasmフォルダが存在しません。
なお、現在makefileにてKERNEL_SRCとして、以下パスを指定しています。
KERNEL_SRC= /opt/st/stm32mp1-xxx/3.1-snapshot/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi/usr/src/kernel
本点対応する方法はございますでしょうか。
yakuhito
2021/3/25 (木) 18:34
同一の名称で、複数のファイルが存在しますね
Yocto環境にて作成した、kernel-build-artifactsに存在するasm/bitsperlong.h の実体がどこにあるのか
探ることで、対応が可能になるかと。
hiro-c
2022/6/7 (火) 20:08
make scripts & make prepare
Out-of-treeのドライバをビルドしていますが、当方では
[kernel_devsrc]込みでビルド&インストールしたSDKを使って
sysroots/[TARGET]/lib/modules/*/build
または
sysroots/[TARGET]/src/kernel
いずれにパスを通す場合でも
# make scripts
# make prepare
を事前に実施しておくことでビルドできるようになりました。
たまたま見つけたこちらのサイトを参考にしました。
https://mickey-happygolucky.hatenablog.com/entry/2019/02/13/112619
yakuhito
2022/6/8 (水) 12:57
有益な情報提供ありがとうございます
Linux Kernel Development Manual 内の Working with Out-of-Tree Modules のセクション
https://docs.yoctoproject.org/3.1.16/kernel-dev/kernel-dev-common.html#b...
では、make scripts までしか紹介されていないですね。
下記サイトでは、make prepare まで紹介されていました。
https://stackoverflow.com/questions/60923890/how-to-build-linux-kernel-m...
有益な情報提供ありがとうございました。