C言語でRaspberry Pi 4のユーザモードとカーネルモードでプログラミングを教えて!
こういった悩みにお答えします.
本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOS(Linuxカーネル)の授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Python,Solidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Verse(UEFN), Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
- 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
- 最近は自然言語処理AIとイーサリアムに関する有益な情報発信に従事.
- (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
- (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
こういった私から学べます.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!
目次
Raspberry Pi 4(ラズパイ4)
Raspberry Pi 4(ラズパイ4)とは,イギリスのラズベリーパイ財団により開発されているARM64(AARCH64)プロセッサを搭載したシングルボードコンピュータです.
Raspberry Piシリーズは2022年2月28日時点で累計4,600万台以上売れていて,世界中で使われています.
Raspberry PiはIoT・組込みボードのデファクトスタンダード(事実上の標準)と言えるでしょう.
Raspberry Pi 4のエミュレータ「QEMU」
Raspberry Pi 4の代表的なエミュレータは,QEMU(キューエム)です.
QEMUを利用すると,Raspberry Pi 4の実機を使わないでコードを書いて実行できます.
つまり,Raspberry Pi 4の実機でプログラムを実行する毎に転送したり,電源をON/OFFしたりする手間を減らせます.
電源のON/OFFを頻繁にするとRaspberry Pi 4の実機が壊れる可能性があるので,実機で実行する必要がある時以外はQEMUで開発することをおすすめします.
QEMUはRaspberry Pi 4のユーザモードとカーネルモードの両方をサポートしています.
2024年4月23日にリリースされたQEMUのバージョン9.0.0からRaspberry Pi 4をサポートしています.
2024年6月現在Ubuntu 22.04 LTSでQEMU 9.0.0以降をインストールするためには,QEMUのソースコードからビルドする必要があります.
QEMUのソースコードからビルドする方法は以下が参考になります.
Raspberry Pi 4でC言語のプログラミング
それでは,Raspberry Pi 4でC言語のプログラミングをしましょう.
具体的には,"Hello World"を表示します.
ARM64(AARCH64)用のクロスコンパイラ「aarch64-linux-gnu-gcc」のインストール
ARM64(AARCH64)用のクロスコンパイラ「aarch64-linux-gnu-gcc」をインストールします.
以下のコマンドを実行します.
1 |
$ sudo apt-get install gcc-aarch64-linux-gnu |
ARM64のユーザモードで実行
ARM64のユーザモードで実行する方法はRaspberry Pi 3と同様です.
興味があるあなたは以下の記事を読みましょう!
ARM64のカーネルモード(Raspberry Pi 4のベアメタル)で実行
ARM64のカーネルモード(Raspberry Pi 4のベアメタル)で実行します.
UARTで"Hello World"を出力するコード一式をこちらからダウンロードして下さい.
※UART0ではなくUART1(miniUART)で実装しています.
raspberry-pi-4.zipの中身は以下になります.
- Makefile:ビルド用のMakefile
- aarch64-elf.ld:ARM64用のリンカスクリプト
- include/:ヘッダファイル一式
- src/:コードファイル一式
コードは複雑なので解説は省略します.興味があれば読み解いて下さい!
以下のコマンドで解凍してARM64のカーネルモードのプログラムをQEMUで実行します.
1 2 3 4 5 6 7 8 |
$ unzip raspberry-pi-4.zip $ cd raspberry-pi-4 $ make ... $ make run Hello World! QEMU: Terminated # Ctrl + a,xでQEMU終了 $ |
QEMUを終了するためには,Ctrl + a,xを入力します.
他のQEMUのショートカットはQEMU Tipsを参照して下さい.
Raspberry Pi 4でC言語を学習できるGitHubリポジトリ
Raspberry Pi 4でC言語を学習できるGitHubリポジトリは以下になります.
ベアメタルプログラミングやOS開発という中級者~上級者向けの内容です.
Raspberry Pi 4の実機でプログラミングする時は,必要なパーツを購入するのを忘れないために,セットで購入することをおすすめします.
Raspberry Pi 4のCPU(ARMv8-A)やボードのマニュアル
Raspberry Pi 4のCPU(ARMv8-A)やボードのマニュアルです.
- Bare-metal Boot Code for ARMv8-A Processors
- ARM Architecture Reference Manual
- Raspberry Pi Documentation Processors
- BCM2711 ARM Peripherals
まとめ
Raspberry Pi 4でC言語をプログラミングする方法を紹介しました.
具体的には,Raspberry Pi 4に対応しているエミュレータのQEMUで,ユーザモードとカーネルモードの両方で"Hello World"を出力するプログラムを実行しました.
QEMUを利用するとお手軽にRaspberry Pi 4用のコードが書けて便利ですので,使いこなしましょう.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!