3 | | ARMv6-Mプロセッサ向けTOPPERS/SSPカーネルの個別パッケージです.[[BR]] |
4 | | ターゲットボードとして [https://www.nxp.com/design/microcontrollers-developer-resources/lpc-microcontroller-utilities/lpc812-lpcxpresso-board:OM13053 LPC812-LPCXpresso Board] で動作確認しています. |
5 | | |
6 | | = 必要なもの = |
7 | | |
8 | | 動作を確認するには,以下のものを用意してください. |
9 | | |
10 | | * [http://www.toppers.jp/ssp-kernel.html#d-download TOPPERS/SSPカーネル 1.3.0] |
11 | | * TOPPERS/SSPカーネルの非依存部個別パッケージです. |
12 | | * このプログラム(ARMv6-Mプロセッサ向け個別パッケージ) |
13 | | * subversion が使用できる場合,以下のコマンドで最新版を入手できます. |
14 | | {{{ |
15 | | $ svn co http://dev.toppers.jp/svn_user/contrib/ssp_armv6_m_gcc/trunk |
16 | | }}} |
17 | | * または,ブラウザで [https://dev.toppers.jp/trac_user/contrib/browser/ssp_armv6_m_gcc/trunk ソースのブラウズ画面]を開き,画面下部にある"Download in other formats: Zip Archive" のリンクをクリックします.そうすると ZIPアーカイブしたソースコードをダウンロードすることが出来ます. |
18 | | * 入手したファイルの armv6_m_gcc および lpcxpresso_lpc812_gcc を,先に取得したSSPカーネルの arch および target ディレクトリの下に,それぞれ配置します. |
19 | | * [http://www.toppers.jp/cfg-download.html コンフィギュレータ] |
20 | | * カーネルのコンフィギュレーションに使用します.1.8.0での動作を確認しています. |
21 | | * 実行ファイルを <カーネルのトップディレクトリ>/cfg/cfg に配置するか,もしくは別の場所においた場合 configure スクリプトの実行時に -g オプションで cfg の実行ファイルの位置を指定することで使用できます. |
22 | | * [http://www.lpcware.com/lpcxpresso/home LPCXpresso IDE] |
23 | | * コンパイルやデバッグに使用します.コンパイルのために GCC だけが必要であれば [https://launchpad.net/gcc-arm-embedded/] からもダウンロードすることが出来ます.動作確認には GCC 4.9.3(LPCXpresso IDE 7.7.2) を使用しました. |
24 | | * UART通信モジュール. |
25 | | * サンプルプログラムはシリアルポートを使用しますのでPCとシリアル通信するために使用します.たとえば[http://akizukidenshi.com/catalog/g/gK-01977 こちら]のようなものがあればよいでしょう.[[BR]] |
| 3 | * ARMv6-Mプロセッサ向けTOPPERS/SSPカーネルの個別パッケージです. |
| 4 | * 動作確認済みターゲットボード |
| 5 | * [https://www.nxp.com/design/microcontrollers-developer-resources/lpc-microcontroller-utilities/lpc812-lpcxpresso-board:OM13053 LPC812-LPCXpresso Board] |
| 6 | * [https://www.nxp.com/design/microcontrollers-developer-resources/lpc-microcontroller-utilities/lpcxpresso812-max-board-for-lpc81x-family-mcus:OM13055 LPCXpresso812-MAX Board] |
| 7 | * 動作確認方法 |
| 8 | * [https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE MCUXpresso IDE]を利用する方法 |
| 9 | * NXPが提供しているマイコン向けの統合開発環境です.上記のどちらのボードでも利用可能です. |
| 10 | * [http://openocd.org/ OpenOCD] + [https://www.gnu.org/software/gdb/ GDB] を利用する方法 |
| 11 | * LPCXpresso812-MAX ボードはCMSIS-DAPをサポートしたデバッグインタフェース回路を搭載しており,OpenOCDとGDBを利用してリモートデバッグできます. |
| 12 | |
| 13 | = ソースコードのセットアップ |
| 14 | == あらかじめ必要なもの |
| 15 | * [https://www.docker.com/ Docker] : 「コンテナ」と呼ばれる仮想環境を動かすために使います.仮想環境にLinuxプログラムの実行環境を構築します.[http://releases.ubuntu.com/xenial/ Ubuntu xenial] ベースのLinuxシステムをお使いの場合は手順2.で使用するスクリプトを直接実行することもできます. |
| 16 | * [https://git-scm.com/ Git] : バージョン管理システム.ここではDockerのスクリプトを取得するのに使います.コンテナ内でもGitを使用してソースコードを取得するのに利用しています. |
| 17 | * コマンドライン環境:コマンドの実行にbashシェルを使います.Mac ならターミナルアプリ,Windowsなら [https://docs.microsoft.com/en-us/windows/wsl/about Windows Subsystems for Linux] などでも利用可能です. |
| 18 | |
| 19 | 以下ではMacOSのターミナルアプリで作業する際の様子を示します.他のホストOSで使用する場合もほぼ同様と思います.行頭の '$' はプロンプトを示します. |
| 20 | |
| 21 | === 1. Dockerコンテナの構築およびシェルの起動 |
| 22 | ==== 1-1 Dockerスクリプトの取得 |
| 23 | カレントディレクトリに docker-toppers というディレクトリが作成されます. |
| 24 | {{{ |
| 25 | $ git clone https://github.com/nmiri-nagoya-nsaito/docker-toppers.git |
| 26 | }}} |
| 27 | ==== 1-2 スクリプトのディレクトリへ移動し,コンテナのシェルを起動(詳細はスクリプト参照) |
| 28 | {{{ |
| 29 | $ cd docker-toppers |
| 30 | $ ./start_shell.sh |
| 31 | specified service: cli |
| 32 | Building cli |
| 33 | Step 1/19 : FROM ubuntu:xenial |
| 34 | xenial: Pulling from library/ubuntu |
| 35 | fe703b657a32: Pull complete |
| 36 | (略) |
| 37 | Step 19/19 : ENTRYPOINT ["sh", "-c", "./scripts/common/entrypoint.sh"] |
| 38 | ---> Running in 47ee7ac43559 |
| 39 | Removing intermediate container 47ee7ac43559 |
| 40 | ---> 18d4bf66fc44 |
| 41 | Successfully built 18d4bf66fc44 |
| 42 | Successfully tagged docker-toppers_cli:latest |
| 43 | Creating network "docker-toppers_default" with the default driver |
| 44 | Creating docker-toppers_cli_1 ... done |
| 45 | saito@06f7b820ab63:~$ ls |
| 46 | }}} |
| 47 | |
| 48 | この時点で Linux コンテナ内のシェルが起動しており,以降の作業はこのシェルで行います.次はカーネルのソースコードをセットアップおよびビルドします. |
| 49 | |
| 50 | === 2. ソースコードのセットアップおよびビルド |
| 51 | ==== 2-1 作業ディレクトリへ移動 |
| 52 | {{{ |
| 53 | saito@06f7b820ab63:~$ cd workdir |
| 54 | }}} |
| 55 | ==== 2-2 本パッケージをダウンロード |
| 56 | ssp_armv6m というディレクトリにファイルがダウンロードされます. |
| 57 | {{{ |
| 58 | saito@06f7b820ab63:~/workdir$ svn co http://dev.toppers.jp/svn_user/contrib/ssp_armv6_m_gcc/trunk ssp_armv6m |
| 59 | A ssp_armv6m/install.sh |
| 60 | A ssp_armv6m/armv6_m_gcc |
| 61 | A ssp_armv6m/armv6_m_gcc/arm_m.h |
| 62 | (以下略) |
| 63 | }}} |
| 64 | ==== 2-3 カーネルコードのセットアップ及びビルド |
| 65 | 注意 |
| 66 | * このスクリプトは$HOME/workdirが存在することを仮定 |
| 67 | * dockerを使わずにスクリプトを実行する場合は,カレントディレクトリに toppers_workdirというディレクトリが作成され,作業が継続される |
| 68 | |
| 69 | {{{ |
| 70 | saito@06f7b820ab63:~/workdir$ ssp_armv6m/build_ssp.sh |
| 71 | ヒット:1 http://archive.ubuntu.com/ubuntu xenial InRelease |
| 72 | 取得:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB] |
| 73 | ヒット:3 http://security.ubuntu.com/ubuntu xenial-security InRelease |
| 74 | (略) |
| 75 | patching file target/cq_frk_fm3_gcc/Makefile.target |
| 76 | Generating Makefile from ../sample/Makefile. |
| 77 | ruby ../cfg/cfg.rb --pass 1 --kernel ssp -I. -I../include -I../arch -I../target/lpcxpresso_lpc812_gcc -I../arch/armv6_m_gcc -I.. -I../sample -I./gen -I../tecs_kernel --api-table ../kernel/kernel_api.def --symval-table ../kernel/kernel_sym.def --symval-table ../syssvc/syssvc_sym.def --symval-table ../target/lpcxpresso_lpc812_gcc/target_sym.def --symval-table ../arch/armv6_m_gcc/prc_sym.def \ |
| 78 | -M deps/cfg1_out_c.d ../target/lpcxpresso_lpc812_gcc/target_kernel.cfg ../sample/sample1.cfg |
| 79 | [cfg.rb] Generated cfg1_out.c |
| 80 | arm-none-eabi-gcc -c -MD -MP -MF deps/cfg1_out.d -O2 -Wall -g -mcpu=cortex-m0 -mthumb -DTOPPERS_OMIT_TECS -D__NEWLIB__ -DTOPPERS_LABEL_ASM -I. -I../include -I../arch -I../target/lpcxpresso_lpc812_gcc -I../arch/armv6_m_gcc -I.. -I../sample -I./gen -I../tecs_kernel -DTOPPERS_CB_TYPE_ONLY -DALLFUNC -fno-strict-aliasing -I../kernel -I ../extension cfg1_out.c |
| 81 | arm-none-eabi-gcc -c -O2 -Wall -g -mcpu=cortex-m0 -mthumb -DTOPPERS_OMIT_TECS -D__NEWLIB__ -DTOPPERS_LABEL_ASM -I. -I../include -I../arch -I../target/lpcxpresso_lpc812_gcc -I../arch/armv6_m_gcc -I.. -I../sample -I./gen -I../tecs_kernel -DALLFUNC -fno-strict-aliasing -I../kernel -I ../extension ../arch/armv6_m_gcc/start.S |
| 82 | (略) |
| 83 | arm-none-eabi-ranlib libkernel.a |
| 84 | arm-none-eabi-gcc -O2 -Wall -g -mcpu=cortex-m0 -mthumb -DTOPPERS_OMIT_TECS -D__NEWLIB__ -DTOPPERS_LABEL_ASM -I. -I../include -I../arch -I../target/lpcxpresso_lpc812_gcc -I../arch/armv6_m_gcc -I.. -I../sample -I./gen -I../tecs_kernel -nostdlib -nostdlib --entry=_start -T ../target/lpcxpresso_lpc812_gcc/lpcxpresso_lpc812.ld -L. -o ssp \ |
| 85 | sample1.o log_output.o vasyslog.o banner.o serial.o syslog.o logtask.o kernel_cfg.o \ |
| 86 | -lkernel -lc -lgcc |
| 87 | arm-none-eabi-nm -n ssp > ssp.syms |
| 88 | arm-none-eabi-objcopy -O srec -S ssp ssp.srec |
| 89 | ruby ../cfg/cfg.rb --pass 3 --kernel ssp -O -I. -I../include -I../arch -I../target/lpcxpresso_lpc812_gcc -I../arch/armv6_m_gcc -I.. -I../sample -I./gen -I../tecs_kernel -T ../target/lpcxpresso_lpc812_gcc/target_check.trb \ |
| 90 | --rom-symbol ssp.syms --rom-image ssp.srec |
| 91 | configuration check passed |
| 92 | }}} |
| 93 | |
| 94 | 以上まで終了すると <カレントディレクトリ>/ssp/build/ に実行プログラムファイル(ssp)が生成されます. |
| 95 | |
| 96 | = 実行確認 |
| 97 | == 必要なもの |
| 98 | サンプルプログラムはシリアルポートを使用しますので,あらかじめ以下のものが必要です. |
| 99 | * UART通信モジュール |
| 100 | * PCとシリアル通信するために使用します.たとえば[http://akizukidenshi.com/catalog/g/gK-01977 こちら]のようなものがあればよいでしょう |
| 101 | * マイコンボード(LPC812)とUART通信モジュールとの結線: |
| 102 | * LPC812ボードの GND, P0_0(RX), P0_4(TX) を使用 |
| 103 | * ブレッドボードを使用すると簡単に結線して試すことが出来ます. |
| 104 | * '''ボードの入出力ピンの電圧は 3.3v''' であるため,UARTモジュール側の電圧もそれにあわせること |
27 | | * シリアル通信結果を確認するために使用します.たとえば[http://osdn.jp/projects/ttssh2/ Tera Term]のようなものがあればよいと思います. |
28 | | |
29 | | = 手順 = |
30 | | |
31 | | * Makefile およびサンプルプログラムのセットアップをします.ビルドするディレクトリの場所はこの例の通りでなくても基本的には構いません. |
32 | | {{{ |
33 | | $ cd <カーネルトップディレクトリ> |
34 | | $ mkdir build; cd build |
35 | | $ ../configure -T lpcxpresso_lpc812_gcc |
36 | | }}} |
37 | | |
38 | | * 次にビルドして実行プログラムを作成します. |
39 | | * コンパイル方法は他のTOPPERSカーネルと同様です.LPCXpresso IDE でビルドするか,もしくはコマンドラインで以下のように実行します. |
40 | | {{{ |
41 | | $ make depend |
42 | | $ make |
43 | | }}} |
44 | | |
45 | | * プログラムのダウンロードまたはデバッグには LPCXpresso IDE を使用しました.使用方法についてはツール説明文書を参照してください. |
46 | | * この IDE は,メニュー「File --> Import」で開かれる Import ダイアログから 「Existing Code as Makefile Project」で Makefile を直接インポートすることが可能です. |
47 | | |
48 | | * マイコンボード(LPC812)とUART通信モジュールとは以下の条件で接続しました. |
49 | | * LPC812ボードの GND, P0_0(RX), P0_4(TX) を使用.ブレッドボードを使用すると簡単に結線して試すことが出来ます. |
50 | | * UART ピンの電圧は 3.3vで,シリアルUSBモジュールの端子電圧もそれにあわせること. |
51 | | * 通信条件 19200bps, 8bit, 1stop, parity-none, no-flow |
| 106 | * シリアル通信結果を確認するために使用します.Windowsの場合,たとえば [http://osdn.jp/projects/ttssh2/ Tera Term] のようなものがあればよいと思います. |
| 107 | * 通信条件 19200bps, 8bit, 1stop, parity-none, no-flow |
| 108 | |
| 109 | ターゲットボードへのプログラム転送および実行の方法として,MCUXpresso IDEを使う方法と,OpenOCD+GDBを使う方法があります. |
| 110 | |
| 111 | == [https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE MCUXpresso IDE] を用いた動作確認 |
| 112 | |
| 113 | ホスト上で MCUXpresso IDE を使用してビルド,デバッグします.docker-composeの設定により,コンテナのworkdir ディレクトリは共有されていてホストマシンから参照できますので,その中の ssp ディレクトリをIDEからインポートします. |
| 114 | |
| 115 | === 必要なもの |
| 116 | * [https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE MCUXpresso IDE] |
| 117 | * コンパイルやデバッグに使用します.ダウンロードにはユーザ登録が必要です.またダウンロードの際はホストマシン上で動作するものを選びます.動作確認にはMCUXpresso IDE v11.1.1 を使用しました. |
| 118 | |
| 119 | === プロジェクトのインポート |
| 120 | |
| 121 | * メニュー「File --> Import」でダイアログを開く. |
| 122 | * ダイアログで「Makefile Project with Existing Code」を選び,Nextを押す. |
| 123 | * 「Import Existing Code」ダイアログで設定を入力し,Finish を押す.するとプロジェクトが生成される. |
| 124 | * Project Name :適当な名称をつける |
| 125 | * Existing Code Location:「Browse」ボタンを押し,ssp ディレクトリを選択してOpen を押す. |
| 126 | * Toolchain for Indexer Settings:NXP MCU Tools を選ぶ |
| 127 | * Project Explorer で作成したプロジェクトを選択し,メニュー「Project --> Properties」を選ぶ.するとプロジェクトのプロパティ設定ダイアログが開く. |
| 128 | * プロジェクト設定のダイアログで以下の設定をし,「Apply and Close」 ボタンを押す. |
| 129 | * C/C++ Build |
| 130 | * Build location の Build directory:「${workspace_loc:/ssp}/build」 |
| 131 | * C/C++ Build --> Environment に環境変数を追加 |
| 132 | * 変数名:「RUBYOPT」,値:「-EUTF-8」 |
| 133 | * C/C++ Build --> MCU Setteings |
| 134 | * SDK MCUs から LPC812 を選択 |
| 135 | |
| 136 | === ビルド |
| 137 | * メニュー「Project --> Build Project」を選び,ビルドする. |
| 138 | |
| 139 | === デバッグ設定 |
| 140 | * メニュー「Run --> Debug Configurations」を選ぶ.ダイアログが表示される. |
| 141 | * ダイアログで,設定を行い,「Apply」で設定反映 および「Debug」を押してデバッグを開始する. |
| 142 | * C/C++(NXP Semiconductors) MCU Application --> <デバッグ設定名> |
| 143 | * 「Main」タブの「C/C++ Application」に実行ファイルを指定する |
| 144 | * 「Search Project」ボタンを押し,一覧から「ssp」を選んでOKを押す. |
| 145 | * 「GDB Debugger」タブの「GDB Debugger」が「arm-none-eabi-gdb」であることを確認 |
| 146 | * デバッグ開始すると,デバッグ用プローブの選択ダイアログが表示される.「LPC11U3x CMSIS-DAP」を選択して「OK」を押す. |
| 147 | * プログラムの実行が開始される. |
| 148 | |
| 149 | ステップ実行やブレークポイントの設定,MTB(Micro Trace Buffer) など使用方法の詳細についてはツールの説明文書を参照してください. |
| 150 | |
| 151 | == [http://openocd.org/ OpenOCD] + [https://www.gnu.org/software/gdb/ GDB] を用いた動作確認 |
| 152 | |
| 153 | ホスト上でOpenOCDを起動し,それをGDBサーバとしてコンテナ内のGDBからリモート接続する方法です. |
| 154 | |
| 155 | === 必要なもの |
| 156 | * [http://openocd.org/ OpenOCD] |
| 157 | * ホストマシン上で動作し,ターゲットボードと接続して状態の確認やフラッシュメモリへの書き込みに使います.[https://www.gnu.org/software/gdb/ GDB] を利用したリモートデバッグではGDBサーバとしても機能します. |
| 158 | * Linux(Ubuntu)の場合は APT, MacOS の場合は [https://brew.sh/index_ja HomeBrew]などのパッケージマネージャでインストールできます. |
| 159 | * ターゲット向けGDB(arm-none-eabi-gdb) |
| 160 | * コンテナ内で動作し,ビルドした実行ファイルをOpenOCD経由でターゲットに転送および実行確認するのに使います. |
| 161 | |
| 162 | コンテナ環境でのソースのビルドは先の「2-3 カーネルコードのセットアップ及びビルド」の手順で完了しているので,ここではGDBでターゲットに転送する手順を示します. |
| 163 | |
| 164 | === OpenOCDの起動 |
| 165 | |
| 166 | カレントディレクトリが workdir ディレクトリであるとします. |
| 167 | {{{ |
| 168 | $ openocd -f ssp/target/lpclpcxpresso_lpc812_gcc/openocd_lpc812max.cfg |
| 169 | Open On-Chip Debugger 0.10.0 |
| 170 | Licensed under GNU GPL v2 |
| 171 | For bug reports, read |
| 172 | http://openocd.org/doc/doxygen/bugs.html |
| 173 | Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'. |
| 174 | adapter speed: 10 kHz |
| 175 | adapter_nsrst_delay: 200 |
| 176 | cortex_m reset_config sysresetreq |
| 177 | Info : CMSIS-DAP: SWD Supported |
| 178 | Info : CMSIS-DAP: Interface Initialised (SWD) |
| 179 | Info : CMSIS-DAP: FW Version = 1.10 |
| 180 | Info : SWCLK/TCK = 1 SWDIO/TMS = 0 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1 |
| 181 | Info : CMSIS-DAP: Interface ready |
| 182 | Info : clock speed 10 kHz |
| 183 | Info : SWD DPIDR 0x0bc11477 |
| 184 | Info : lpc8xx.cpu: hardware has 4 breakpoints, 2 watchpoints |
| 185 | }}} |
| 186 | |
| 187 | OpenOCD はこの状態でポート3333番で接続を待ち続けるため,コンテナからGDBで接続します. |
| 188 | 終了する時は Ctrl-C を押します. |
| 189 | |
| 190 | === ターゲット向けGDBの起動 |
| 191 | |
| 192 | ssp/build に移動し,gdb を起動します. |
| 193 | {{{ |
| 194 | saito@06f7b820ab63:~/workdir/ssp/build$ arm-none-eabi-gdb ssp |
| 195 | GNU gdb (GNU Tools for Arm Embedded Processors 9-2019-q4-major) 8.3.0.20190709-git |
| 196 | Copyright (C) 2019 Free Software Foundation, Inc. |
| 197 | License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> |
| 198 | This is free software: you are free to change and redistribute it. |
| 199 | There is NO WARRANTY, to the extent permitted by law. |
| 200 | Type "show copying" and "show warranty" for details. |
| 201 | This GDB was configured as "--host=x86_64-apple-darwin10 --target=arm-none-eabi". |
| 202 | Type "show configuration" for configuration details. |
| 203 | For bug reporting instructions, please see: |
| 204 | <http://www.gnu.org/software/gdb/bugs/>. |
| 205 | Find the GDB manual and other documentation resources online at: |
| 206 | <http://www.gnu.org/software/gdb/documentation/>. |
| 207 | |
| 208 | For help, type "help". |
| 209 | Type "apropos word" to search for commands related to "word"... |
| 210 | Reading symbols from ssp... |
| 211 | }}} |
| 212 | |
| 213 | === ターゲットへの接続および実行プログラムの転送 |
| 214 | ==== 接続 |
| 215 | {{{ |
| 216 | (gdb) target remote localhost:3333 |
| 217 | Remote debugging using localhost:3333 |
| 218 | _kernel_prc_terminate () at ../arch/armv6_m_gcc/prc_config.c:198 |
| 219 | 198 ; |
| 220 | }}} |
| 221 | |
| 222 | [https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds MacOSでコンテナ内部からホストに接続する際は特別なホスト名を使用します.] |
| 223 | |
| 224 | {{{ |
| 225 | (gdb) target remote host.docker.internal:3333 |
| 226 | Remote debugging using host.docker.internal:3333 |
| 227 | _kernel_prc_terminate () at ../arch/armv6_m_gcc/prc_config.c:198 |
| 228 | 198 ; |
| 229 | }}} |
| 230 | ==== 設定 |
| 231 | {{{ |
| 232 | (gdb) set remotetimeout 10000 |
| 233 | (gdb) monitor reset |
| 234 | (gdb) monitor halt |
| 235 | target halted due to debug-request, current mode: Thread |
| 236 | xPSR: 0x01000000 pc: 0x00000170 msp: 0x10000730 |
| 237 | }}} |
| 238 | ==== 転送 |
| 239 | {{{ |
| 240 | (gdb) load |
| 241 | Loading section .text, size 0x28d4 lma 0x0 |
| 242 | Loading section .rodata, size 0x928 lma 0x28d4 |
| 243 | Loading section .data, size 0x8 lma 0x31fc |
| 244 | Start address 0xc0, load size 12804 |
| 245 | Transfer rate: 962 bytes/sec, 4268 bytes/write. |
| 246 | }}} |
| 247 | |
| 248 | === 実行開始 |
| 249 | {{{ |
| 250 | (gdb) c |
| 251 | Continuing. |
| 252 | }}} |
| 253 | |
| 254 | プログラムの実行を止める時は Ctrl-C を押します. |
| 255 | また,GDBのプロンプトで quit コマンドを実行するとGDBを終了します. |
| 256 | |
| 257 | {{{ |
| 258 | ^C |
| 259 | Program received signal SIGINT, Interrupt. |
| 260 | _kernel_prc_terminate () at ../arch/armv6_m_gcc/prc_config.c:198 |
| 261 | 198 ; |
| 262 | (gdb) q |
| 263 | A debugging session is active. |
| 264 | |
| 265 | Inferior 1 [Remote target] will be detached. |
| 266 | |
| 267 | Quit anyway? (y or n) y |
| 268 | Detaching from program: /Users/saito/work/toppers/docker-toppers/workdir/ssp/build/ssp, Remote target |
| 269 | Ending remote debugging. |
| 270 | }}} |
| 271 | |
| 272 | == コンテナの終了および再開 |
| 273 | |
| 274 | コンテナのシェルを抜ける場合は exit を実行します. |
| 275 | 再度シェルを起動する場合は ./start_sherll.sh を実行します. |
| 276 | |
| 277 | {{{ |
| 278 | saito@06f7b820ab63:~/workdir/ssp/build$ exit |
| 279 | ログアウト |
| 280 | $ |
| 281 | }}} |
| 282 | |
| 283 | == 注意事項 |
| 284 | * SSP-1.3.0 のパッケージに含まれるファイルの文字コードは EUC-JP でしたが,Ruby版コンフィギュレータを使用するために UTF-8 に変換しています.したがってファイルを追加,編集する場合は UTF-8 を使用してください. |
| 285 | * Windows版のgitで core.autocrlf が true に設定されている場合,シェルスクリプトの実行に失敗することがあるようです.その場合は `git config` コマンドで `core.autocrlf` を `false` に設定してみてください. |