接続数

COUNTER207678FROM 2012/1/12

TOPPERS diary最小セットカーネル(smallest setprofile kernel)

TOPPERS/SSP日誌 >> 記事詳細

2017/10/11

Raspberry PiでTOPPERS

Tweet ThisSend to Facebook | by kaizen
Raspberry PiでTOPPERS AZO234/RaspberryPi_TOPPERS_FMP(AZO234と略記)

作業時間 8時から9時半、10時から

AZO234はLinuxを用いている。
ここでは、Mac OS Xを利用する。

1 TOPPERS/FMP
fmp_zynq_gcc-20170523.zip

解凍する。
./fmp1.4.0/doc/user.txt
にはgccのどの版を使用するかの記述なし。
---b
cd doc

grep gcc *

user.txt:gcc/GCC開発環境依存部

user.txt:arch/gcc/
---e

./fmp1.4.0/README.txt
「【最初に読むべきドキュメント】

 FMPカーネルのユーザーズマニュアルが,doc/user.txtにあります.FMPカーネ
 ルを使用する場合には,まずはこのドキュメントからお読み下さい.」

2 GCC

AZO234は、
「開発環境
 Eclipse+OpenOCD+JTAG,arm-non-eabi-gdb
 を用いて開発・デバッグを行った.」
とあり、
「コンパイラ
 動作確認した GCC は,
 4.9.3 20150529 (prerelease) (15:4.9.3+svn231177-1)
 である.」
とある。

arm-non-ebi-gcc
を検索する。
---b

brew install arm-non-eabi-gcc

Error: No available formula with the name "arm-non-eabi-gcc" 

==>Searching for a previously deleted formula...

Warning: homebrew/core is shallow clone. To get complete history run:

  git -C "$(brew --repo homebrew/core)" fetch --unshallow


Error: No previously deleted formula found.

==>Searching for similarly named formulae...

==>Searching local taps...

Error: No similarly named formulae found.

==>Searching taps...

==>Searching taps on GitHub...

Error: No formulae found in taps.

---e
残念。

「arm-non-eabi-gcc」検索

GCC ARM Toolchainでmbedをオフラインビルド okuhiroyuki

https://launchpad.net/gcc-arm-embedded/

からダウンロードするようになっている。
 
右の緑のメニューの上から5番目がMac 用
解凍すると
gcc-arm-none-eabi-5_4-2016q3というフォルダができる。

AZO234
「ビルドと実行

 TOPPERS/FMPカーネル 簡易版
 https://www.toppers.jp/fmp-e-download.html

 「Zynq7000(Xilinx社)簡易パッケージ」を取得し、
 (例:fmp_zynq_gcc-20170523.zip)
 本ソース差分を上書きする。」

先頭のgithubからzipでダウンロードして解凍。
RaspberryPi_TOPPERS_FMP-master
というフォルダができる。

readme.md は先頭のWEBの内容とほぼ同じ。

AZO234
「差分を上書きする。」
という意味を調べるため差分を取ってみる。
---b

 diff core_support.S ../../../../RaspberryPi_TOPPERS_FMP-master/fmp/arch/arm_gcc/common/core_support.S

448c448

<     ldmfd sp!,{r0-r3,ip,lr,pc}^ /* コンテキストの復帰,^付きなので、cpsr <- spsr */

---

>     ldmfd sp!,{r0-r5,ip,lr,pc}^ /* コンテキストの復帰,^付きなので、cpsr <- spsr */

455c455

<     ldmfd sp!,{r0-r3,ip,lr}

---

>     ldmfd sp!,{r0-r5,ip,lr}

588c588

<     ldmfd sp!,{r0-r3,ip,lr}

---

>     ldmfd sp!,{r0-r5,ip,lr}

---e

差分を取らなくても、直接上書きすれば良いことが分かった。

fmpフォルダの下のフォルダをfmp_1.4.0にずりずりと持って行って放す(drag and drop)

「target」という名前の項目がすでにこの場所にあります。現在の移動中の項目で置き換えますか?」
「置き換える」を選択。

駄目だ。フォルダごと置き換えている。しかも、元のファイルは無くなっている。
ガビーン。

再度AZO234からzipをダウンロードして、個々に確認しながら

./targetのrp2_gcc, rp3_gccは新規。2つフォルダを追加なので、コピペ。
core_support.Sはファイルをコピペ。

./arch/arm_gccのbam283xは新規。フォルダをコピペ。

./arch/arm_gcc/commonの core_support.Sは変更なのでファイルをコピペ

./sample/Makefileは、古い方をMakefile.oldに変更してコピペ

...
AZO234
「コンフィギュレータ
コンフィギュレータ は,1.9.6 を用いた.
Linux での使用にあたり,
文字コードをUTF-8に,改行コードをLFに変換した.
Boost は,1.64.0 を用いた.」

Mac 版のバイナリは1.9.5しかない。ひとまず1.9.5を使ってみる。

./cfg/cfgフォルダの下にコピーする。 cfg.exeと同じフォルダ。

AZO234
「user.txtに従ってビルド環境を作成する.
 <ターゲット略称> は,rp2_gcc または rp3_gcc となる.」

./doc/user.txt
「3.3 サンプルプログラムの構築と実行

 依存関係ファイルの生成方法をASPから変更したため,make depend のステッ
 プが必要ない.」

ASPの文書を見ないといけない?

./asp/doc/user.txt
「3.クイックスタートガイド

ここでは,ターゲット依存部が用意されているターゲットシステム上で,ASPカー
ネル上で動作するサンプルプログラムを構築・動作させるまでの手順を示す.

3.1 開発環境の準備

ASPカーネルを用いたシステム構築には,以下のツールが必要である.

ホストシステム用のツール
perl動作確認:5.10.0
GNU Make動作確認:3.81

TOPPERS新世代カーネル用コンフィギュレータ
cfg動作確認:1.9.0
※ 1.5以前のバージョンでは動作しない.

ターゲットシステム用のツール(クロス開発環境)
標準規格に準拠したCコンパイラ
アセンブラ,リンカ,ライブラリアン
シンボルファイル出力ツール,ヘキサファイル出力ツール
標準Cライブラリ(必須ではない)

ターゲットシステム用のツールにGNU開発環境を用いる場合には,以下のツール
が必要である.

ターゲットシステム用のGNU開発環境ツール
BINUTILS(as,ld,ar,nm,ranlib,objcopy,objdump)
GCCまたはGCC-CORE(gccおよびそこから呼び出されるツール)
NEWLIB(標準Cライブラリ,必須ではない)

動作確認されているターゲットシステム用のツールについては,ターゲット依
存部のユーザーズマニュアルを参照すること.

ターゲットシステム用の標準Cライブラリは,アプリケーションが標準Cライブ
ラリを使用しない場合には,必要ない.ただし,コンパイラが標準Cライブラリ
関数(memcpy,memsetなど)を呼び出すコードを生成する場合があり,その場
合には標準Cライブラリが必要である.標準Cライブラリを用意する代わりに,
生成したコードが呼び出す関数のみを自分で用意してもよい.

以下では,これらのツールが用意できていることを前提に,UNIXマシン上での
構築手順を説明する.また以下の説明では,makeコマンドがGNU Makeであるも
のとする(ASPカーネルのサンプルのMakefileは,GNU Makeの拡張機能を用いて
いる).」
「3.3 サンプルプログラムの構築と実行
次に,ASPカーネル上で動作するサンプルプログラムを構築する方法を説明する.
まず,サンプルプログラムのオブジェクトファイルを置くディレクトリを作成
し,コンフィギュレーションスクリプトを実行する.例えば,オブジェクトファ
イルを置くディレクトリを,ASPカーネルのソースファイルを展開したディレ
クトリの下のOBJという名称のディレクトリにする場合には,次のコマンドを
実行する(ディレクトリの場所と名称は任意に決めてよい).
% cd asp
% mkdir OBJ
% cd OBJ
% perl ../configure -T <ターゲット略称>
ここで,<ターゲット略称>は,targetディレクトリの下に置かれているターゲッ
ト依存部ディレクトリの名称である.コンフィギュレーションスクリプトのオ
プションについては,「5.コンフィギュレーションスクリプトの使い方」の
章で説明する.
コンフィギュレーションスクリプトの実行により,カレントディレクトリには,
サンプルプログラムを構築するためのMakefile,サンプルプログラム用のコン
フィギュレーションファイル(sample1.cfg),サンプルプログラム本体
(sample1.hおよびsample1.c)が生成される.
コンフィギュレーションスクリプトの実行後,必要であればMakefileを修正す
る.Makefileの修正方法については,「6.Makefileの修正方法」の章で説明
する.
その後,make dependで依存関係ファイル(Makefile.depend)を生成した後,
makeコマンドによりサンプルプログラムのロードモジュール(aspまたは
asp.exe)が生成できる.依存関係ファイルの生成には若干時間がかかる.
% make depend
% make
ここで構築したサンプルプログラム(sample1.h,sample1.c,sample1.cfg)
は,ASPカーネルの基本的な動作を確認するためのものである.このプログラ
ムの概要説明は,sample1.cの先頭のコメントにある.」

cd aspは要らない。

make: arm-none-eabi-gcc: No such file or directory

pathが切ってなかった。

MacでPATHを通す

set path
/user/Administrator/Downloads/gcc-arm-none-eabi-5_4-2016q3/bin

---b
vi ~/./bash_profile
---e

export PATH=/Users/Administrator/Downloads/gcc-arm-none-eabi-5_4-2016q3/bin:/usr/local/Cellar/gcc/7.1.0/bin:$PATH


---b

source ~/.bash_profile

---e

---b
$mkdir OBJ
$ cd OBJ
$ perl ../configure -T rp3_gcc
configure: Generating Makefile from ../sample/Makefile.
configure: Generating sample1.c from ../sample/sample1.c.
configure: Generating sample1.h from ../sample/sample1.h.
configure: Generating sample1.cfg from ../sample/sample1.cfg.
$ make

arm-none-eabi-gcc -o obj/cfg1_out.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj   -DALLFUNC  -I../kernel cfg1_out.c

arm-none-eabi-gcc -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj -DALLFUNC  -I../kernel ../arch/arm_gcc/bcm283x/start.S

arm-none-eabi-gcc  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj   -T ../target/rp3_gcc/rp3_svc.ld -o cfg1_out \

obj/cfg1_out.o 

arm-none-eabi-nm -n cfg1_out > cfg1_out.syms

arm-none-eabi-objcopy -O srec -S cfg1_out cfg1_out.srec

../cfg/cfg/cfg --pass 2 --kernel fmp -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common \

-T ../target/rp3_gcc/target.tf --api-table ../kernel/kernel_api.csv --cfg1-def-table ../kernel/kernel_def.csv  --cfg1-def-table ../arch/arm_gcc/bcm283x/chip_def.csv --cfg1-def-table ../arch/arm_gcc/common/core_def.csv sample1.cfg

touch -r kernel_cfg.c kernel_cfg.timestamp

arm-none-eabi-gcc -o obj/sample1.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  sample1.c

arm-none-eabi-gcc -o obj/log_output.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../library/log_output.c

arm-none-eabi-gcc -o obj/vasyslog.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../library/vasyslog.c

arm-none-eabi-gcc -o obj/t_perror.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../library/t_perror.c

arm-none-eabi-gcc -o obj/strerror.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../library/strerror.c

arm-none-eabi-gcc -o obj/banner.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../syssvc/banner.c

arm-none-eabi-gcc -o obj/syslog.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../syssvc/syslog.c

arm-none-eabi-gcc -o obj/serial.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../syssvc/serial.c

arm-none-eabi-gcc -o obj/logtask.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj  ../syssvc/logtask.c

arm-none-eabi-gcc -o obj/kernel_cfg.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj   -DALLFUNC  -I../kernel kernel_cfg.c

kernel_cfg.c:686:2:warning: excess elements in array initializer

  {UINT32_C(0x00000000), UINT32_C(0x20000000), UINT32_C(0x00000000), UINT32_C(0x000008f0)}, /* Priority -15 */

  ^

kernel_cfg.c:686:2:note: (near initialization for '_kernel_ipm_mask_table')

../cfg/cfg/cfg --pass 3 --kernel fmp -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common \

--rom-image cfg1_out.srec --symbol-table cfg1_out.syms \

-T ../arch/arm_gcc/bcm283x/chip_offset.tf --api-table ../kernel/kernel_api.csv --cfg1-def-table ../kernel/kernel_def.csv  --cfg1-def-table ../arch/arm_gcc/bcm283x/chip_def.csv --cfg1-def-table ../arch/arm_gcc/common/core_def.csv sample1.cfg

check complete

arm-none-eabi-gcc -o obj/chip_support.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj -DALLFUNC  -I../kernel ../arch/arm_gcc/bcm283x/chip_support.S

arm-none-eabi-gcc -o obj/core_support.o -c  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj -DALLFUNC  -I../kernel ../arch/arm_gcc/common/core_support.S


(中略)


arm-none-eabi-gcc  -mcpu=cortex-a53 -mlittle-endian -g -MD  -Wall -O2  -DTOPPERS_USE_BCM2837 -DTOPPERS_BCM283X_SECURE_SVC_NONSEC -D__TARGET_ARCH_ARM=7 -DTOPPERS_SAFEG_NONSECURE -DG_SYSLOG  -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common -L obj -nostdlib  -mcpu=cortex-a53 -mlittle-endian -nostdlib -N  -T ../target/rp3_gcc/rp3_svc.ld -o fmp  \

obj/sample1.o obj/log_output.o obj/vasyslog.o obj/t_perror.o obj/strerror.o   obj/banner.o obj/syslog.o obj/serial.o obj/logtask.o obj/kernel_cfg.o   libkernel.a -lc -lgcc  

arm-none-eabi-nm -n fmp > fmp.syms

arm-none-eabi-objcopy -O srec -S fmp fmp.srec

arm-none-eabi-objcopy -O binary -S fmp kernel7.img

../cfg/cfg/cfg --pass 3 --kernel fmp -I. -I../include -I../arch -I..  -I../target/rp3_gcc -I../arch/arm_gcc/bcm283x -I../arch/arm_gcc/common \

--rom-image fmp.srec --symbol-table fmp.syms \

-T ../target/rp3_gcc/target_check.tf --api-table ../kernel/kernel_api.csv --cfg1-def-table ../kernel/kernel_def.csv  --cfg1-def-table ../arch/arm_gcc/bcm283x/chip_def.csv --cfg1-def-table ../arch/arm_gcc/common/core_def.csv sample1.cfg

check complete


$ ls -al *.img

-rwxr-xr-x  1 administrator  staff  60196 10 11 10:59 kernel7.img

---e
Raspberry Pi 3をシリアルコンソールだけで初回起動するまで


黒-GND
赤-USB電源からの5V
緑-TX(ロジックレベル:3.3V)
白-RX(ロジックレベル:3.3V)

macintoshでserial(USB) console

Mac OS X Mavericks に USBシリアル変換アダプタ USB-RSAQ5 のドライバをインストールする

---b

ls -al tty.*

crw-rw-rw-  1 root  wheel   20,   0 10 11 15:49 tty.Bluetooth-Incoming-Port

crw-rw-rw-  1 root  wheel   20,   6 10 11 15:54 tty.usbserial

---e

Mac のシステム情報を確認する方法
---システム情報,USB

USB-Serial Controller:


  製品ID:0x2303

  製造元ID:0x067b  (Prolific Technology, Inc.)

  バージョン:3.00

  速度:最高12 Mb/

  製造元:Prolific Technology Inc.

  場所ID:0x14200000 / 14

  利用可能な電流(mA:500

  必要な電流(mA:100

  高負荷時消費電流(mA:0


---

ps.
TOPPERS/sspカーネルソースの勉強会第七回の記録(raspberry PIへ)
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介 2014
『カーネルソースの歩き方 RaspberryPi演習』2015

https://ja.osdn.net/users/alvstakahashi/pf/raspberry_pi_SSP/wiki/FrontPage
https://github.com/alvstakahashi/RPI-SHRINK-SSP-FULL


08:28 | 投票する | 投票数(0) | コメント(0)