タグ

ブックマーク / masahir0y.blogspot.com (5)

  • U-Boot と Linux Kernel のメインラインで Zynq を動かす 2014年4月版

    [以前](/2014/01/u-boot-linux-kernel-zynq.html)、2014年1月時点での U-Boot と Linux のメインラインで Zynq を動かす方法を紹介しました。 その後、コード(特に U-Boot)が大きく変わっているので、 2014年4月時点での動かし方を紹介することにします。 使用するのは、 - U-Boot 2014.04 - Linux Kernel 3.14 - Zynq ZC706 ボード です。 その前に、 Zynq のブートシーケンスを復習しておきましょう。 Active Boot (= JTAG ブート以外)は 1. Boot ROM 2. FSBL 3. U-Boot 4. Linux Kernel というのが、Xilinx が公式にサポートしているブートシーケンスで、 [Xilinx Wiki ページ](http://www.w

    iww
    iww 2018/11/21
  • Device Tree 入門

    Device Tree というのは、ハードウェアの詳細を記述したデータ構造体です。 元々は PowerPC Sybsystem から始まったようなのですが、すでに ARM Linux は DeviceTree 一色になってしまっています。 そのため Device Tree を知らないと、 SoC の移植はおろか、ドライバの開発もできない。 そこで、 Device Tree の初歩についてまとめてみることにします。 ただし、私自身が初心者ですので、難しいことは説明できませんし、間違っている部分もあるかもしれませんが、ご了承ください。 ARM のことしかわかりませんので、 ARM を対象として書くことにします。 ### 何故に DeviceTree か? ### より Generic な OS を記述するためです。 ハードウェアを差分を吸収するのがドライバの役目なのですが、勘違いしてはいけない

  • make の -C オプションについて

    makefile を読み込むなどの動作の前に、ディレクトリ dir に移動する。 (中略) このオプションは通常、make を再帰的に呼び出すときに使われる。 と書いてあります。 ほとんどの場面で 「make -C dir」は「cd dir; make」と同じと考えていいと思うが、 わずかに挙動が違う部分があることに最近気づいた。 実験のため、次のような /home/foo/Makefile, /home/foo/bar/Makefile という2つの Makefile を用意。 /home/foo/Makefileの内容: all: @ echo CURDIR = $(CURDIR) @ echo PWD = $(PWD) @ cd bar; $(MAKE) /home/foo/bar/Makefileの内容: all: @ echo CURDIR = $(CURDIR) @ echo

    iww
    iww 2017/08/18
    『$(PWD) は使うべきでない。』 なるほど面白い
  • make の ifdef はわかりにくい

    シェルにおいて $ FOO= とすると、シェル変数 FOO は空ではあるが、定義はされている。 変数 FOO を未定義にするには $ unset FOO としなければならない。 つまり、シェルスクリプトで、「変数が空」であることと、「変数が未定義」であることは明確に違う。 一方、make においてはこのあたりが紛らわしいというか、非常にわかりにくいと思うので、整理しておきたい。 make には ifdef という構文があるが、これの挙動を見てみる。 (実験1) 以下の内容の Makefile を用意する。 FOO= all: ifdef @echo FOO is defined. else @echo FOO is NOT defined. endif 実行すると以下のようになる。 $ make FOO is NOT defined. FOO= のように、空文字を代入した場合、 ifdef

    iww
    iww 2017/07/19
    覚えておこう
  • Makefile での .PHONY と FORCE の違い

    [以前](/2012/02/linuxmakefile-4.html)、 `.PHONY:` 指定と `: FORCE` 指定について触れたことがあるのですが、 明らかに両者を使い分けるべきケースがあることに最近気がついた。 まずは、 make の初歩ですが、 PHONY ターゲットからおさらいします。 次のような `clean` ターゲットがあったとする。 clean: $(RM) $(programs) $(objects) もし、カレントディレクトリにたまたま `clean` という名前のファイルが存在すると、 この `clean` は実行してくれません。 $ touch clean $ make clean make: `clean' is up to date. そこで、 .PHONY: clean clean: $(RM) $(programs) $(objects) としてお

  • 1