link 未来から過去へ表示(*)
link 過去から未来へ表示

link もっと前
   2019年 5月 13日 ---> 2019年 5月 4日
link もっと後

2019年 5月 13日

GCC を調べる - その 1 - ビルド

目次: GCC を調べる - まとめリンク

最近 GCC のコードを書き換えたり、デバッガで追ったり、GCC とお友達になろうとしています。まだ仲良くなれていませんが、入り口に立つまでが色々大変だったのと、間違いなく数カ月後に手順を忘れるので、方法を書き残しておこうと思います。

GCC のコードを書き換えて、結果を反映させるには、何らかの方法で GCC をビルドする必要があります。クロスビルド用ツールチェーンの構築は、昔の日記(2019年 4月 28日の日記参照)に書いたとおりです。コンパイラを追うだけで、ルートファイルシステムが必要なければ、おそらく crosstool-NG を使うのが無難です。差分ビルドがうまく行かないので、何か変更した後に再ビルドするのがちょっと面倒ですが、それ以外は簡単で便利です。

私は再ビルドが遅くてイライラしたのと、ビルドの仕組みにも興味があったので、以前の日記(2019年 4月 29日の日記参照)に書いたとおり、昔作ったクロスコンパイラをビルドする Makefile(GitHub へのリンク)を改造して使っています。ブランチは origin/develop/separate-makefile です。もうこちらを本線にしても良い気がしてきたな。

オレオレ GCC ビルド環境

これも使い方を忘れるのでメモしておきます。手動でビルドするのとあまり変わりません。

オレオレ GCC ビルド環境、ソースコード取得
#### ビルド用ディレクトリ

$ mkdir build_my_toolchain
$ cd build_my_toolchain


#### 環境構築用のリポジトリ

$ git clone https://github.com/katsuster/crosstool-builder
$ cd crosstool-builder
$ git checkout -t origin/develop/separate-makefile
$ cd ../


#### GCC だけリポジトリで取得する(git diff したいから)

$ git clone https://gcc.gnu.org/git/gcc.git


## GCC-8.3.0 を使う、他のバージョンでもある程度ビルドできるはず

$ cd gcc
$ git checkout gcc-8_3_0-release
$ cd ../


#### その他の依存モジュールは tarball を使用する

$ mkdir tmp
$ cd tmp
$ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.19.1.tar.xz
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.31.1.tar.bz2
$ wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.xz

$ wget https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.lz
$ wget https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
$ wget https://ftp.gnu.org/gnu/mpfr/mpfr-4.0.2.tar.xz
$ cd ../


#### ツールチェーンに必要なモジュール

$ tar xf tmp/linux-4.19.1.tar.xz
$ tar xf tmp/binutils-2.31.1.tar.bz2
$ tar xf tmp/glibc-2.28.tar.xz

$ ln -s linux-4.19.1    linux
$ ln -s binutils-2.31.1 binutils
$ ln -s glibc-2.28      glibc


#### GCC に必要なモジュール

$ tar xf tmp/gmp-6.1.2.tar.lz
$ tar xf tmp/mpc-1.1.0.tar.gz
$ tar xf tmp/mpfr-4.0.2.tar.xz

$ cd gcc
$ ln -s ../gmp-6.1.2  gmp
$ ln -s ../mpc-1.1.0  mpc
$ ln -s ../mpfr-4.0.2 mpfr
$ cd ../

自分で書いていて面倒くさいなあと思いました。スクリプトにしたほうが良かったかもしれない。もし binutils も変更したりデバッグしたければ、tarball の代わりにリポジトリをチェックアウトしてくると良いです。

オレオレ GCC ビルド環境、ビルド
$ source crosstool-builder/env.sh

$ cd crosstool-builder

$ make -j4 install

デフォルトでは RISC-V 64bit Linux 向けのクロスコンパイラをビルドします。env.sh を書き換えれば AArch64 や ARM 向けもビルド可能です。RISC-V 32bit 向けは gcc-static(ベアメタル用コンパイラとして使用可能)までしかビルドできません。以降は glibc のビルドでエラーになり Linux 用のクロスコンパイラはビルドできません。

オレオレ GCC ビルド環境、部分ビルド
$ cd crosstool-builder

$ make -f gcc-static.mk -j4 install

GCC に何か修正を入れてビルドし直すときは、ビルドし直したい *.mk ファイルを指定して make します。

編集者: すずき(更新: 2020年 6月 1日 14:04)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2019年 5月 9日

ROCKPro64 と PCI Express - 解決編

目次: ROCK64/ROCKPro64 - まとめリンク

ROCKPro64 の PCIe が動かなくて、しばらく放置(2019年 3月 16日の日記参照)していたのですが、今日久しぶりに見てみたところ、意外とあっさり直せました。

PCIe が動かなかった理由は単純で、PERST# 信号を全く制御しておらず、PCIe カードのリセットを解除していなかったためでした。それは動かないわ。

不思議なことに linux-next では ROCKPro64 以外の RK3399 搭載ボードは PCIe が使えるように対応が入っているのに、ROCKPro64 だけハブられています。悲しいので、作ったパッチを LKML にぶん投げておきました。誰かの役に立てば嬉しいですね。

ちなみに ROCKPro64 の PCIe PERST# 信号は、こんな経路で来ていました。
RK3399 GPIO2_D4 -> PCIE_PERST_L -> PCIE_PERST_3V3_L -> PERST#

実験

我が家には PCIe のカードが 3つあります。あります、というか、わざわざ ROCKPro64 の PCIe 接続テストのために買ったという方が正しいです。

  • USB 3.0 増設カード
  • SATA 増設カード
  • PCIe - PCI ブリッジカード

リセットを制御していない場合、基本的にはどのボードも動きません。しかし USB 拡張カードだけはたまに動きます。不思議な挙動です。カードが PERST を無視しているのか、偶然か、深追いしていないのでわかりません。

PERST# の制御をするように直したところ、USB 3.0 カードと、SATA カードはバッチリ認識するようになりました。PCIe - PCI ブリッジカードは起動中になぜか ROCKPro64 にリセットが掛かってしまい、うまくいきませんでした。

ROCKPro64 からの給電では足りないのかと疑って、外部からブリッジカードに電源を供給してみましたが、ダメでした。PC でも使えたり使えなかったりする、割と特殊なカードらしいので、ROCKPro64 では動かないのかもしれません。

さらに調べるにせよ、何にせよ、また次の機会ですね。

メモ: 技術系の話は Facebook から転記しておくことにした。多少修正。

編集者: すずき(更新: 2020年 10月 30日 01:01)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2019年 5月 13日 ---> 2019年 5月 4日
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 1/17 14:28

カレンダー

<2019>
<<<05>>>
---1234
567891011
12131415161718
19202122232425
262728293031-

最近のコメント 5件

  • link 20年12月20日
    すずき 「パック旅行や旅行代理店に割り当てられた専...」
    (更新:12/21 19:00)
  • link 20年12月20日
    hdk 「羽田鹿児島便、ANA直接予約はほとんどし...」
    (更新:12/21 08:17)
  • link 20年09月10日
    すずき 「追加情報。最新の Debian Test...」
    (更新:10/07 16:48)
  • link 20年09月20日
    hdk 「最近は音楽聞く時やビデオ視聴時はミニコン...」
    (更新:09/24 21:43)
  • link 20年09月20日
    すずき 「ありゃー、同じ壊れ方ですね。\n新たなヘ...」
    (更新:09/24 00:23)

最近の記事 3件

link もっとみる
  • link 21年01月16日
    すずき 「[QEMU のデバッグ用ビルド方法] たまに RISC-V 向けの...」
    (更新:01/17 14:28)
  • link 20年08月27日
    すずき 「[サーバ向けプロセッサでは最強の Intel] Twitter で...」
    (更新:01/10 19:49)
  • link 21年01月03日
    すずき 「[Windows の仮想メモリサイズの謎] Windows で「コ...」
    (更新:01/03 13:04)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報