Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KernelVM式 nommu Linux入門/introduce of nommu Linu...
Search
Toshifumi NISHINAGA
July 22, 2017
Programming
2
1.6k
KernelVM式 nommu Linux入門/introduce of nommu Linux for KernelVM
2017年7月22日にKernelVM@東京13で発表した資料です。
STM32F746-discoveryマイコンボードでLinuxを動かす方法を紹介します。
Toshifumi NISHINAGA
July 22, 2017
Tweet
Share
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
1.1k
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
0
2.2k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
460
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.6k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
3
1.5k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
500
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
0
1.9k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
4
3.4k
ARM入門/arm introduction
tnishinaga
14
12k
Other Decks in Programming
See All in Programming
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
140
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
170
生成AI時代のコンポーネントライブラリの作り方
touyou
1
220
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
710
Python型ヒント完全ガイド 初心者でも分かる、現代的で実践的な使い方
mickey_kubo
1
120
Goで作る、開発・CI環境
sin392
0
230
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
260
すべてのコンテキストを、 ユーザー価値に変える
applism118
3
1.3k
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
3
770
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.5k
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
170
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
120
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
4 Signs Your Business is Dying
shpigford
184
22k
Fireside Chat
paigeccino
37
3.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Side Projects
sachag
455
42k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Embracing the Ebb and Flow
colly
86
4.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Transcript
Kernel/VM式 ARMマイコン入門 Toshifumi NISHINAGA
Kernel/VM式 nommu Linux入門 Toshifumi NISHINAGA
$ who @tnishinaga
一般的なLinuxの動くARM board
Linuxなどの現代の一般的なOSは 仮想メモリを必要とするため、 仮想メモリ制御を行う Memory Management Unit(MMU) が必要
MMUはCortex-Aファミリにのみ搭載されている Cortex-A Cortex-R Cortex-M CPU Clock 数百MHz 〜 数GHz よくしらない
数MHz 〜 数百MHz RAM 数百MB 〜 数GB よくしらない 数KB 〜 数MB MMU/MPU MMU MPU MPU 用途 スマートフォン等 のプロセッサ リアルタイム 機器用 マイコン
しかし、世の中にはマイコンで Linuxを動かしたい人が居る Cortex-A Cortex-R Cortex-M CPU Clock 数百MHz 〜 数GHz
よくしらない 数MHz 〜 数百MHz RAM 数百MB 〜 数GB よくしらない 数KB 〜 数MB MMU/MPU MMU MPU MPU 用途 スマートフォン等 のプロセッサ リアルタイム 機器用 マイコン
nommu Linux
mmuの無いプロセッサで動くLinux
マイコンで動くLinux
STM32F746G discovery board
• STM32F746NG ◦ Cortex-M7 ◦ 200MHz CPU clock ◦ 7-stage
pipeline ◦ Superscalar ◦ I&D cache available ◦ 1MB Flash
つよいCPU + 8MB SDRAM
= Linuxが動く
どうやって起動するか
ブートに必要なもの ブートローダー Linux Kernel (+ device tree blob) rootfs
ブートローダー 役割: • SDRAMの有効化 • SDRAMへのカーネル読み込み • カーネルの起動
役割: • 各種ペリフェラルの初期化 • OS基本機能の初期化 • rootfsのマウント • init処理の実行 Linux
Kernel
役割: • busyboxなどの実行バイナリを提 供する rootfs
SDRAM ブートの流れ STM32F746 ROM u-boot.bin Image root.cpio
U-Bootのビルド $ git git://git.denx.de/u-boot.git && cd u-boot $ curl https://gist.githubusercontent.com/tnishinaga/ea0180fc28227ad158d3092645ccb575/raw/76cbb90cf30a23
d3a59c860c7a887250b31a385b/disable_spl_stm32f7.diff | git apply U-Bootのソースをダウンロード.SPLを切るパッチを当てる $ make stm32f746-disco_defconfig $ make menuconfig STM32F746-disco用の設定からFITを有効化
FITを有効化 U-Bootのビルド
U-Bootのビルド $ make CROSS_COMPILE=arm-none-eabi- -j4
U-Bootのインストール $ sudo st-flash write u-boot.bin 0x08000000 st-flashで書き込む USB
Linux Kernelのビルド $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32.git stm32-linux $ cd stm32-linux
$ git checkout -b stm32-dt-for-v4.13 remotes/origin/stm32-dt-for-v4.13 ソースをダウンロード $ make ARCH=arm stm32_defconfig $ make ARCH=arm menuconfig STM32用の設定を取得して修正していく
RAMアドレスを0xC0000000に修正 (FLASH size も0x00100000(1MiB)に修正) Linux Kernelのビルド
XIPを無効化 Linux Kernelのビルド
Linux Kernelのビルド $ ARCH=arm CROSS_COMPILE=arm-none-eabi- make -j4 Image dtbs ビルドする
rootfsの用意 $ curl http://elinux.org/images/5/51/Stm32_mini_rootfs.cpio.bz2 | bzip2 -d > rootfs.cpio Cortex-M4用のrootfsをもらってくる
(後方互換があるのでCortex-M7でも動く)
rootfsの用意 $ curl http://elinux.org/images/5/51/Stm32_mini_rootfs.cpio.bz2 | bzip2 -d > rootfs.cpio Cortex-M4用のrootfsをもらってくる
(後方互換があるのでCortex-M7でも動く) 動かなかった
rootfsの用意 buildrootを使ってrootfsを作る(要パッチ) 今パッチ作ってるので少々お待ちください…… $ make stm32f746_disco_defconfig $ make CROSS_COMPILE=arm-none-eabi- -j4
起動用イメージの用意 $ curl -O https://gist.githubusercontent.com/tnishinaga/ea0180fc28227ad158d3092645ccb575/raw/cdab9f1bfd5488 d2ec180c383f0d142fb1f5200a/stm32f7_fit.its $ mkimage -f stm32f7_fit.its
stm32f7_fit.itb Image Tree Souce(stm32f7_fit.its)を持ってきて Image Tree Blob(stm32f7_fit.itb)を作成
起動イメージの転送 PC側でminicomを起動する $ minicom -D /dev/ttyACM0 -b 115200
起動イメージの転送
起動イメージの転送 PC側(minicom)はymodemよりFIT(*.itb)を送信 (Crtl + A, Sで開ける) U-Boot側はloadyで待受け U-Boot > loady
0xC0400000
起動イメージの転送
Linuxの起動 bootmでFITからLinux Kernelを読み込んで起動 U-Boot > bootm 0xC0400000
Demo: sl
今後の予定 • NIC使えるようにする • 画面使えるようにする • MINCS動かしてみる(?)