TOPPERS/SSPカーネルソース勉強会(1) start.S
アセンブラのソースコードの拡張子はSを使う。
最初に呼び出すコード。
~/workdir/ssp_ruby/arch/arm_m_gcc/start.S
FMPは
~/workdir/RPi64Toppers/fmp/target/rpi_arm64_gcc/start.S
<この項は書きかけです。順次追記します。>
TOPPERSの分かりにくさ(1)
archというフォルダとtargetというフォルダに分かれている理由
どう考えてもわからない。archというフォルダの中に、targetというフォルダがあるのならまだ分かる。
フォルダの階層が深いと対応できない道具類があったのかもしれない。
/*
* TOPPERS Software
* Toyohashi Open Platform for Embedded Real-Time Systems
*
* Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
* Copyright (C) 2015 by Naoki Saito
* Nagoya Municipal Industrial Research Institute, JAPAN
*
* 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
* ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
* 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
* また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
* 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
* 免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
* に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
* アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
* の責任を負わない.
*
* @(#) $Id: start.S 1304 2008-08-27 07:28:36Z ertl-honda $
*/
/*
* カーネル用のスタートアップモジュール(ARM-M用)
*/
#define TOPPERS_MACRO_ONLY
#define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */
#define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */
#define CAST(type, val) (val) /* 型キャストを行うマクロ */
#include "kernel_impl.h"
#include "arm_m.h"
/*
* スタートアップルーチン
*
* Threadモードで呼び出されることを前提としてる.
*/
.text
.align 2
.code 16
.syntax unified
.globl _start
.type _start, function
_start:
cpsid f /* 割込みロック状態へ */
#ifdef INIT_MSP
/*
* MSPの設定
*/
mov r0, #CONTROL_MSP /* MSPを有効に */
msr control, r0
isb /* control の操作後に必要 */
ldr r0,=_kernel_istkpt
ldr r1,[r0]
msr msp, r1
#endif /* INIT_MSP */
/*
* hardware_init_hookの呼び出し (0でない場合)
*
* ターゲットハードウェアに依存して必要な初期化処理がある場合
* は,hardware_init_hook という関数を用意する
*/
ldr r0, =hardware_init_hook
cbz r0, start_1
blx r0
start_1:
#ifndef OMIT_BSS_INIT
/*
* BSSセクション初期化
*/
mov r0, #0
ldr r1, =__bss_start
ldr r2, =__bss_end
cmp r1, r2
bhs start_3
start_2:
str r0, [r1]
add r1,r1, #4
cmp r1, r2
blo start_2
#endif /* OMIT_BSS_INIT */
start_3:
#ifndef OMIT_DATA_INIT
/*
* DATAセクション初期化
* __idata_start から __idata_end までを,__data_start 以降に
* コピーする
*/
ldr r1, =__idata_start
ldr r2, =__idata_end
cmp r1, r2
bhs start_5
ldr r3, =__data_start
start_4:
ldr r0, [r1]
str r0, [r3]
add r1, #4
add r3, #4
cmp r1, r2
blo start_4
#endif /* OMIT_DATA_INIT */
/*
* software_init_hook を呼出し(0 でない場合)
*
* ソフトウェア環境(特にライブラリ)に依存して必要な初期化処
* 理がある場合は,software_init_hook という関数を用意すれば
* よい.
*/
start_5:
ldr r0, =software_init_hook
cbz r0, start_6
blx r0
start_6:
bl sta_ker
l_end:
b l_end
#include "kernel_impl.h"
#include "arm_m.h"
名刺代わりの技術書10選
https://qiita.com/kaizen_nagoya/items/dc497dcaa5a304fc96c8
一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
小川清最終講義、小川清最終講義(再)計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.