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
1.8k
2
Share
KernelVM式 nommu Linux入門/introduce of nommu Linux for KernelVM
2017年7月22日にKernelVM@東京13で発表した資料です。
STM32F746-discoveryマイコンボードでLinuxを動かす方法を紹介します。
Toshifumi NISHINAGA
July 22, 2017
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.6k
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
1.8k
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
0
3.5k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
760
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.8k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
3
2k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
680
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
1
2.3k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
5
3.9k
Other Decks in Programming
See All in Programming
10 Tips of AWS ~Gen AI on AWS~
licux
5
430
AI-DLC Deep Dive
yuukiyo
9
4.5k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
170
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
280
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
24
14k
第3木曜LT会 #28
tinykitten
PRO
0
110
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
150
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
6
3.4k
実用!Hono RPC2026
yodaka
2
240
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
2
500
How Swift's Type System Guides AI Agents
koher
0
290
Making the RBS Parser Faster
soutaro
0
470
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
100
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
320
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
A designer walks into a library…
pauljervisheath
211
24k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Mobile First: as difficult as doing things right
swwweet
225
10k
ラッコキーワード サービス紹介資料
rakko
1
3.1M
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Paper Plane (Part 1)
katiecoart
PRO
0
6.7k
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動かしてみる(?)