2017年7月30日

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (13)

前回(12)で/devにファイルを作ってくれるようになったが、rmmodの方を何もしていないことに気付いた。

本を真似して追加。

device_destroy(char_class, char_dev);
class_destroy(char_dev);


が、rmmodすると、エラーというか、派手に失敗した。

# rmmod zybo_gpio
Unable to handle kernel paging request at virtual address 0f400020
pgd = de690000
[0f400020] *pgd=00000000
Internal error: Oops - BUG: 5 [#1] PREEMPT SMP ARM
Modules linked in: zybo_gpio(O-) uio_pdrv_genirq
CPU: 1 PID: 1062 Comm: rmmod Tainted: G           O    4.9.0-xilinx-v2017.2 #1
Hardware name: Xilinx Zynq Platform
task: de4a4140 task.stack: de78c000
PC is at class_unregister+0x8/0x4c
LR is at char_exit_module+0x20/0x54 [zybo_gpio]
pc : []    lr : []    psr: 000e0013
sp : de78df38  ip : dd61cb6c  fp : 00000000
r10: 00000000  r9 : de78c000  r8 : c0106e24
r7 : 00000081  r6 : be83db60  r5 : 000000f4  r4 : 0f400018
r3 : 0f400018  r2 : 0000003b  r1 : c7c1fb00  r0 : 0f400018
Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 18c5387d  Table: 1e69004a  DAC: 00000051
Process rmmod (pid: 1062, stack limit = 0xde78c210)
Stack: (0xde78df38 to 0xde78e000)
df20:                                                       bf008b40 000000f4
df40: be83db60 bf008570 bf008980 00000880 be83db60 c0177650 dd735900 6f62797a
df60: 6970675f b6f3006f 00000001 de4a4140 00000000 c0a33838 de4a4140 00000000
df80: c0a33838 0000005b de4a4140 c0131bdc de78c000 00106e24 0002165c 6f62797a
dfa0: 6970675f c0106c60 0002165c 6f62797a be83db60 00000880 000ba9b0 be83de18
dfc0: 0002165c 6f62797a 6970675f 00000081 be83df0e 00000002 000b87b8 00000000
dfe0: be83db58 be83db48 000214b4 b6e17a60 600e0010 be83db60 f4f71bdc 6efff6d7
[] (class_unregister) from [] (char_exit_module+0x20/0x54 [zybo_gpio])
[] (char_exit_module [zybo_gpio]) from [] (SyS_delete_module+0x164/0x1d4)
[] (SyS_delete_module) from [] (ret_fast_syscall+0x0/0x3c)
Code: e8bd4010 eaf8ae6e e92d4070 e1a04000 (e5903008)
---[ end trace 7dde3b5d13b2d080 ]---
Segmentation fault

classの登録・削除をコメントアウトするとrmmodしても問題ないので、追加した部分に問題があることになる。


PCがclass_unregisterになっているから、class_destroy()だろうか?
いや、device_destroy()したあと、先にclass_unregister()してやらないといけないみたいだ。。。が、それでも同じだ。


insmodしたときに、out-of-treeとか出てるので、それだろうか。。。
わからんが、気になるので調べよう。

treeは、デバイスツリーかと思っていたのだが、kernelのソースツリーなのか。
https://www.kernel.org/doc/Documentation/kbuild/modules.txt

確かにこのドライバはkernelのソースツリーには入っていない。
では、別に問題ないのかな?


じゃあ、さっぱりわからんな。
Linuxのドライバのサンプルを探すところからやらねば。


2017/07/31 0:02追記

あ、class_destroy()の引数を間違えているではないか。。。

誤:class_destroy(char_dev);

正:class_destroy(char_class);

そうよね、classの削除なんだから、classを引数に取るよね。。。

gistを修正した。
まあ、いつもに比べると傷は浅いな(失敗慣れしすぎ)。

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (12)

前回(11)のminorを32から24に書き換えるというのが変だということに気付いた。
32で動いていたのだから、そこは書き換えたらいかんだろう。

よくわからんが、class登録するときだけ24にして、他は32のままに変更した。
そうすると、/devにも作成されたし、echoすると成功した。

GISTに置いておこう。
https://gist.github.com/hirokuma/1bda2e783813412c4df16b8027f5480c


まだ、32だの24だのが何なのか理解していないので、次回からはそこを調べていこう。
Linux/Zynqのつながりを見ていくことになるはずだ。


あとは、おまけだ。


image.ubの効率的な作り方を知っておきたい。

全体をビルドするときは petalinux-build だけでやっているが、けっこう時間がかかる。
今回だと、koファイルだけビルドして、image.ubの元になる場所にコピーして、image.ubを作り直す、というだけでよいはずだ。
事前のチェックとか、そういうのはすっ飛ばせないだろうか。


まず、--helpを見る。
使えそうなのは、この辺りか。

Deploy kernel forcefully:
   $ petalinux-build -c kernel -x deploy -f

Build kernel and update the bootable images:
   $ petalinux-build -c kernel
   $ petalinux-build -x package

Build rootfs only:
   $ petalinux-build -c rootfs

Build myapp of rootfs only:
   $ petalinux-build -c rootfs/myapp

以前ダメだったスラッシュでの方法も書かれている。
が、これはmyappなので、moduleだと使えないんじゃなかろうか?
試しにgpio-demoでやってみたが、やっぱりエラーだ。


PetaLinuxのユーザーズガイドを見る。
v2017.2はUG1144(pdf)だが、内容はv2017.1と同じらしい。
コマンドラインリファレンスUG1157(pdf)もある。
ネットから探しているけど、DocNavを使うのがよいだろうね。

気になっていたこのコマンド。

$ petalinux-build -x package

これは、今のdeployエリアに入っているものからFIT imageを作るものらしい。
だから、koファイルを作って、deployエリアにコピーさえすれば、最後に -x packageでimage.ubができるはず。
rootfs/myappではなく、myappを直接指定すればよいのかな?

$ petalinux-build -c myapp
$ petalinux-build -x package

やってみた。

$ petalinux-build -c led8drv
[INFO] building led8drv
[INFO] sourcing bitbake
INFO: bitbake led8drv
Loading cache: 100% |############################################| Time: 0:00:00
Loaded 3236 entries from dependency cache.
Parsing recipes: 100% |##########################################| Time: 0:00:02
Parsing of 2447 .bb files complete (2415 cached, 32 parsed). 3237 targets, 224 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |#######################################| Time: 0:00:06
Checking sstate mirror object availability: 100% |###############| Time: 0:00:13
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
NOTE: Tasks Summary: Attempted 2430 tasks of which 2389 didn't need to be rerun and all succeeded.
INFO: Copying Images from deploy to images
[INFO] successfully built led8drv

lsでimage/linuxのタイムスタンプを見ると、rootfs.cpioやvmlinuxは更新されているが、image.ubは同じだ。

$ petalinux-build -x package
[INFO] building project
[INFO] sourcing bitbake
INFO: generating FIT Image
INFO: bitbake petalinux-user-image -R /home/xxx/build/conf/fit-image.conf
Loading cache: 100% |############################################| Time: 0:00:00
Loaded 3236 entries from dependency cache.
Parsing recipes: 100% |##########################################| Time: 0:00:02
Parsing of 2447 .bb files complete (2415 cached, 32 parsed). 3237 targets, 224 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |#######################################| Time: 0:00:05
Checking sstate mirror object availability: 100% |###############| Time: 0:00:11
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
NOTE: Tasks Summary: Attempted 2431 tasks of which 2402 didn't need to be rerun and all succeeded.
INFO: Copying Images from deploy to images
[INFO] successfully built project

こっちは、image.ubのタイムスタンプが更新された。


しかし、それぞれ時間かかるのよねぇ。

$ time petalinux-build -c led8drv
real	1m23.720s
user	1m10.616s
sys	0m11.788s

$ time petalinux-build -x package
real	1m20.351s
user	1m7.700s
sys	0m10.048s

いっそのこと、petalinux-buildでやった方が早いんじゃないだろうか?

$ time petalinux-build
real	2m34.151s
user	2m10.356s
sys	0m19.984s

微妙やね。。。
コマンドを2回打ち込まなくてよい分、この方が楽かもしれん。

2017年7月29日

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (11)

動かんシリーズの1~10で、PetaLinux v2017.2を載せたZyboのJEコネクタに接続した7セグLEDを制御できるようになった。

PetaLinuxがよいのか、というのは難しいところだ。
できれば、Ubuntuみたいにセキュリティアップデートを動的に行いやすいディストリビューションの方がよいのかもしれない。
メーカーが、売った人を追跡できるような規模であれば、営業さんにアップデートしてもらうという作戦もあるのかもしれんが、そうもいかんだろうしねぇ。
みんなどうしてるんだろう?


さて、まずはデバイスファイルから解決しよう。

以前、NXPのOM5578をRaspberry Piで動かそうとしたときに、ドライバのエラーが出て/devにファイルが作られないということがあった。
だから、自分でmknodしたり、あらかじめrootfsに仕込んだりせず、ドライバが自分でデイバスファイルを作ることができるのだと思う。


あー、udevというものがあったな・・・。
PetaLinuxでもudevを使っているのだろうか?

Starting udev
udevd[725]: starting version 3.2

あるのね。

私が持っている『Linuxデバイスドライバプログラミング』では、ドライバのクラス登録と、/sys/class配下にドライバ情報を作る作業を行うらしい。


もしかしたら、テンプレートで作ったソースファイルだとやってくれているかもしれない、と思ってディレクトリを見ていると、<project_name>/project-spec/meta-user/recipes-apps/gpio-demoというフォルダがあることに気付いた。
こんなアプリ追加してないんですけど。。。

ネットで検索すると、echoで書込むことによってLEDが光るらしい。
えんべでっどログ: ZYNQのMIO GPIOをLinuxから使う

# echo 913 > /sys/class/gpio/export
# echo out > gpio913/direction
# echo 1 > gpio913/value

お、MIO7のLED(LD4)が点灯した。
0を書込むと消灯する。

デバイスファイルを使わずにアクセスすることもできる、ということか。
そういえば、Raspberry Piも同じようなものがあったな。


このドライバは、./build/tmp/work-shared/plnx_arm/kernel-source/drivers/gpio/gpio-zynq.cのようだ。

本によると、class_create()やclass_device_create()を使うようなのだが・・・このソースには使われていなかった。
もう9年くらい前の本だから、時代が変わったのだろうか?
あるいは、kernelの組込みドライバだから、別のしくみがあるのだろうか。
なんとなく、後者である気がするのだが、深入りはやめておこう。


ただ、デバイスツリーも気になっているのだ。
あれは、デバイスの情報を取ってくることができないので、代わりに別バイナリにしたとか、そんな話だったと思う。
Raspberry Piで見たとき、デバイスツリーの情報からmknodしている箇所があったような気がするのだが、他のと記憶が混ざっている気もする。
この本では、まだデバイスツリーが登場する前なので、関連があるともないともわからない。
うーむ。


まあ、本の通りやってみよう。

やってみたのだが、class_device_create()が未定義と言われる。
includeが足りないのかと思ったら、廃止になったのか・・・。
driver - Linux function class_device_create changed to? - Stack Overflow

device_create()になったらしいが、なかなかつらいな。
サイトにはサンプルも更新されているようなので、そちらを見た方が良いのかも。
SBクリエイティブ:Linuxデバイスドライバプログラミング


とりあえずdevice_create()にするとビルドできた。
insmodすると、/devにファイルができてる。
おお!

・・・しかし、リダイレクトで書込むとエラーになった。

-sh: /dev/zybo_gpio32: No such device or address

lsで見ると、majorは244でいいんだけど、前回mknodしたときのminorは24だったのだ。

# ls -l /dev/zybo_gpio32
crw-------    1 root     root      244,  32 Jul 29 08:58 /dev/zybo_gpio32

まあ、これは元のソースが32になっていたから、仕方ないのかな?

24に変更して、ビルドし直す。
insmodして、echoして・・・ダメだ、同じエラーだ。

# ls -l /dev/zybo_gpio24
crw-------    1 root     root      244,  24 Jul 29 09:09 /dev/zybo_gpio24

/sys/class/zybo_gpio/zybo_gpio24はできているんだけどねぇ。

# cat /sys/class/zybo_gpio/zybo_gpio24/uevent
MAJOR=244
MINOR=24
DEVNAME=zybo_gpio24

続きは、また明日だ。

[zybo]PetaLinux v2017.2でHDLを書かずにLED制御の準備をする (2017/7月)

今月のこれまでの成果として、Zybo + PetaLinux v2017.2で、HDLを書かずにLED制御の準備をするまでの手順を書き残そう。
「LED制御の準備」というのは、ドライバを作る手前まで、という状態に持っていくことを指している。
まだチュートリアルが動かせないシリーズがあるので、DeviceTreeなども解決してから続きを書こう。


ツールは、こう。

  • Vivado v2017.2 (Windows10)
  • XSDK v2017.2 (Windows10)
  • PetaLinux v2017.2 (Xubuntu 16.04 on VirtualBox)


HDFファイル作成

まず、Vivadoでの作業を行う。

  1. Vivadoを起動
  2. Projectを作成する
    1. Boardは"Zybo"を選択
  3. "Create Block Design"をクリック
    1. "+"アイコンをクリックして、Zynqを追加
    2. 上の方にリンク"Run Block Automation"が出てくるので、クリックして、チェックされているのを確認して、OK
    3. "+"アイコンをクリックして、AXI GPIOを追加
    4. 上の方にリンク"Run Connection Automation"が出てくるので、クリック
      1. 一番上のツリーにチェックする
      2. axi_gpio_0>GPIOの中から"leds_4bits"を選択して、OK
    5. LinuxからEthernetを使いたい場合は、ZYNQをダブルクリック
      1. 左のPeripheral I/O Pinsをクリック
      2. Searchに"Ethernet"と打つ
      3. Ethernet0>MDIOにチェックが入っているので、右にスクロールさせて、MDIOをクリックしてOK
    6. Save
  4. 左側のツリーでSourcesタブを選択し、Design Sourcesの下にある項目(たぶんdesign_1(design_1.bd))を右クリック
    1. Create HDL Wrapper...を選択
    2. ダイアログが出てくるので、auto-updateの方になっているのを確認して、OK
    3. Critical Messagesダイアログが出てくるが、気にせずOK
  5. "Generate Bitstream"をクリック
    1. 終わるまで待つ
    2. 終わったらダイアログが出てくるので、Cancelを選択してOK
  6. メニューから、"File > Export > Export Hardware..."を選択
    1. Include bitstreamにチェックして、OK
  7. メニューから、"File > Launch SDK"を選択
    1. 立ち上がったら、自動的に関連するファイルを作ってくれるので、終了させる
  8. Vivadoも終了させる



PetaLinux image作成

  1. PetaLinuxの設定ファイルを読み込む
    $ source settings.sh
  2. プロジェクトを作るフォルダに移動(お好きな場所へ)
  3. 空のプロジェクトを作る。今回は"gpioled"という名前にする。
    $ petalinux-create -t project -n gpioled --template zynq
  4. できたディレクトリ(今回はgpioled)に移動する
    $ cd gpioled
  5. さきほど作ったVivadoプロジェクトの中から拡張子がsdkのフォルダ内にある"design_1_wrapper_hw_platform_0"というような名前のフォルダをまるごとgpioledの中にコピーする
  6. 読込んで設定
    $ petalinux-config --get-hw-description=./design_1_wrapper_hw_platform_0
  7. 特に変更せず終わらせると、そこそこ時間かかる処理が始まる。
  8. 忘れていたが、LEDのドライバを準備する。今回はleddrvという名前にする。
    $ petalinux-create -t modules -n leddrv --enable
  9. "gpioled/project-spec/meta-user/recipes-modules/leddrv"辺りにファイルができているので、うまいこと編集するとよいのだが、まずはテンプレートのままにしておく。
  10. ビルドする。こちらは時間がかかる。
    $ petalinux-build
  11. BOOT.BINを作る
    $ petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/design_1_wrapper.bit --u-boot --force


これで、BOOT.BINとimage.ubができたので、SDカードにコピーしてZyboを起動。
ログインして、ドライバを確認。

# ls /lib/modules/4.9.0-xilinx-v2017.2/extra/
leddrv.ko

read/writeを用意していないが、insmodくらいならできるだろう。

# insmod /lib/modules/4.9.0-xilinx-v2017.2/extra/leddrv.ko
leddrv: loading out-of-tree module taints kernel.
<1>Hello module world.
<1>Module parameters were (0xdeadbeef) and "default"

open/closeもできそうだが、デバイスファイルがないのでできない気がする。


ひとまず、これで、デバイスファイルとドライバを作ればLED制御できそうな状態になったと思う。
以降の調査は、これからやっていこう。

2017年7月27日

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (10)

前回までで、ようやくここまで来た。

  • Vivado v2017.2でGPIOを7本有効にする
  • XSDK v2017.2で何かする(この工程はいるのか?)
  • hdfファイル一式をPetaLinux v2017.2に持っていって、user moduleを追加してビルドし、mknod, insmodして動かす


user moduleがビルドできずに悩んでいたのは、petalinuxで追加したmoduleのテンプレートにあったREADMEを読んだからだということに気付いた。

To compile and install your module to the target file system copy on the host,
simply run the
     "petlainux-build -c kernel" to build kernel first, and then run
     "petalinux-build -c rootfs/led8drv" to build the module
command.

-cで、rootfsとled8drvをそれぞれやりなさい、ということかもしれんが、わからんよ。。。


あとは、ドライバをいじるところをやれば、多少は理解できるんじゃなかろうか。


Linuxのドライバは、

  • open
  • close
  • read
  • write
  • ioctl

でできているはずだ。
ioctl()って逃げよねぇ、と思いつつも、他に手段が思いつかないので、便利に使っている。


Interface誌のダウンロードから持ってきたファイルを見ておこう。
closeではなくreleaseという名前になっているし、ioctlはないが、基本的にはこういう構成になるだろう。
プレフィクスが"char_"なのは、キャラクタ型ドライバだからか。
確か、ブロック型とキャラクタ型があって、ASCII社の本で簡単な区別方法を読んだ気がするが、探し出せなかった。
ブロック転送しないものはすべてキャラクタ型だ、とか、そんなだったような。


私だとioctl()でやってしまいそうだけど、ここはchar_write()で書込処理を行っている。
利点は、Linuxコマンドと組み合わせやすい、というところか。
ioctl()だと、ソース書かないと動かせない気がする。

今は、書き込んだデータがASCIIコードでそのまま吐き出されているのだが、条件は簡単で、

    • 1byte目が'0'
    • 2byte目が'x'
    • データ数は3より大きい

だった場合、3byte目をiowrite32()で書込んでいるだけのようだ。


では、簡単に書き換えて、ビルドし直してみよう。
やはり、echoした数字をそのまま表示させたい。

なんとなくカルノ図を描いたりする気がしたのだが、Linuxから見ると数字を変換してポートに書込むだけなので、変換テーブルしかいらなかった。

image

アノードが共通なやつを使っているから、0で点灯するのだ。
大ざっぱだが、こういう感じの修正になった。

    unsigned int val;
    const unsigned int VAL[] = {
        0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10
    };

    if (('0' <= k_buf[2]) && (k_buf[2] <= '9')) {
        printk("WRITE %02x\n", (unsigned char)VAL[k_buf[2] - '0']);
        iowrite32( VAL[k_buf[2] - '0'], cookie);
    }


ドライバの差し替えは、これでよいのかな?

$ petalinux-build -c led8drv
$ petalinux-build -x package

やるのは、ドライバのコンパイル・リンクと、rootfsへのコピーおよびUboot形式への変更だけなんだけど、あれこれやってるから時間がかかるな。。。

# mknod -m 666 /dev/zybo_led c 244 24
# insmod /lib/modules/4.9.0-xilinx-v2017.2/extra/zybo_gpio.ko
# echo 0x1 > /dev/zybo_led

うん、期待通りに点灯した。


mknodを毎回やるのはめんどうなので、何とかしたいところだ。
Raspberry Piでは、Device Treeに書いておけばudevか何かが自動的にmknodしていたように思うが、PetaLinuxはどうやるんだろう?

そういうのは、次回だ。

2017年7月25日

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (9)

前回(8)の続き。

ドライバのビルドはできたのだけど、insmodしても/dev/zybo_ledみたいなものが出てこない・・・。


昼ご飯を食べ終わって、急に思いついた。

あー、mknodしてない!

は、恥ずかしすぎる・・・。


# mknod -m 666 /dev/zybo_led c 244 24
# insmod /lib/modules/4.9.0-xilinx-v2017.2/extra/zybo_gpio.ko

Interface誌ではmknodするのが245になっていたが、insmodしたときが244だったので、そっちにあわせた。

echoすると、LEDが変化した。

# echo 0x1 > /dev/zybo_led
----- This is the Open Function -----
Node NAME: Ext_GPIO:
MAJOR Number = 244, MINOR Number = 24
Open device successfully: Ext_GPIO:


---- This is the WRITE function -----

k_buf is 0x1
  pos = 4
----- This is the Close Function -----
Closing device: Ext_GPIO:

image

書込んだ値にあわせて7セグも数字のように点灯するのかと思ったが、どうもASCIIコード('1'だと0x31)を出力させているらしい。

Aがb7、Bがb6、・・・ということらしい。
1だとビットは3つしかないのに、なんで4本光ってるんだ?
HI点灯とLO点灯の違いだろうか。


まあいい、このレベルまでは持ってくることができたから、次からはドライバのソースを見ていこう。

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (8)

前回(7)の続き。
LED用のドライバを動かすためにmoduleを追加して、ようやくビルドできたところまで。
全部動いてからまとめて書くとあっさりしているのだろうけど、日記だから許しておくれ。


ビルドのテストとしてmymoduleという名前で追加したのだけど、もう不要になったから、先に削除しておこう。
モジュールのフォルダを削除しただけではコンパイルエラーになり、project-spec/meta-user/recipes-core/petalinux-image.bbappendに追加されていた名前を削除してもコンパイルエラーになった。
依存関係が残っているというエラーっぽいのだが。。。
project-spec/meta-plnx-generated/recipes-core/images/petalinux-user-image.bbにも書かれていたので、そこからも行削除するとビルドできるようになった。


PetaLinuxのリファレンスに書いてあるとおりにビルドしていたのだが、どれをやってうまくいったのかわからん。
エラーにはならなかったのだが、探す場所と探す名前を間違えていてね。。。
Interface誌のページからダウンロードしたCファイルをそのまま使うと、こうなった。

/lib/modules/4.9.0-xilinx-v2017.2/extra/zybo_gpio.ko

lsmodしても出てこないから、自動では読込まないのだろう。

# insmod /lib/modules/4.9.0-xilinx-v2017.2/extra/zybo_gpio.ko
zybo_gpio: loading out-of-tree module taints kernel.
Device registered successfully, Major No. = 244

out-of-treeと出てるけど、よいのかな?
successになっているけど、/dev/zybo_ledなんてデバイスファイルは見つからない。。。
別の名前で増えたわけでもない。


うーん、残念だが、また次回だ。

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (7)

前回(6)の続き。

ドライバを作って追加しようとしたが、ビルドに失敗したのだった。
こういうときは、PetaLinuxのリファレンスマニュアルを読もう。

ちゃんと、「Adding Custom Modules」「Building User Modules」という項目がある。
あ・・・そういうことか。。。


誤
$ petalinux-build -c rootfs/led8drv

  ↓

正
$ petalinux-build -c led8drv


なんで私はrootfs/なんてのを付けようと思ったのだろうね。。。
あまりにガックリしたので、今日はここまで。

2017年7月24日

[btc]ブロックのversion bits

Bitcoinで、UASFだのなんだのと騒がしかった(これを書いているのは2017/07/24)。
あまり関係ないので放置していたが、まったくわからないのも悔しいので、少しだけ調べることにした。


ビットコインのBIP91シグナル、ロックインへ 分岐か収束か | ビットコインの最新情報 BTCN|ビットコインニュース

やはりよくわからんが、bit1やbit4という数字が出てくる。
BIP91を見ると、bitが4っぽいことはわかった。

consensus.vDeployments[Consensus::DEPLOYMENT_SEGSIGNAL].bit = 4;

しかし、どのデータを見るのか?
BIP9がその大元らしいが、最初に「'version' field in Bitcoin block」と書いているので、ブロックのversionフィールドなのだろう。

Bitcoinプロトコルの"block"に構成が書かれている。
txと同じで、先頭の符号付きLittle Endianの4byteがversionになっている。


では、どのbitがどういう意味なのかという仕様がいるはずだ。

BIP9には以下のリンクが貼られていた。
bips/assignments.mediawiki at master · bitcoin/bips

見ると、bit0とbit1しかない。
bit1は、segwitだ。BIP148と思われる。


じゃあ、bit4ってのはなんなんだってことになるけど、8月1日にbit4が立ったversionのblockじゃないとノードがはじくようにしようとしていた、ということだろうか(BIP読んでない...)。
bit2と3が空いているが、実は私が知らないだけで、そういう判定のような意味で使おうとして、消え去ったのか。

最初の記事にも書いてあるが、じゃあ、bit4だけ立てて、bit1は立てなかったら、segwitを有効にする閾値を80%にすること自体は賛成するけど、segwitには賛成しないよ、ということか。


結局「なんだかよくわからんね」で終わってしまった。
またどこかで勉強しよう。


そもそも、versionをそういう目的で使うのって、曖昧すぎじゃなかろうか。
それをわかってやってるのかもしれないけど、それにしてもねぇ。。。


2017/07/24 12:38追加

BIP91がアクティベート、SegWit支持率は97.9%の高止まり | ビットコインの最新情報 BTCN|ビットコインニュース
BIP141シグナルと書いてあるので読んでいったら、そっちにもbit1と書かれていた。https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#deployment


あれ、じゃあBIP148ってなんだっけ?ということになった。
P2SHみたいに、と書いているから、これがUASFというやつなのか(読んでなさ過ぎ)。

BIP091   : bit4
BIP141-  : bit1

じゃあ、bit4もbit1も立てたノードが多数あるのか。
"SegWit支持率"と書いているから、bit1だけで97.9%あるということなのかね。
bit4が承認されなくても達成できるけど、それがなかったらここまではこなかったのか。


Segwit support - Bitcoin Wiki
これは、DeveloperとBusiness(マイナー?)の意思表明リストらしい。
ページの一番下に更新日が書いてあって、私が見ているのは2017/07/23 09:04になっている。
見たら何か分かるかと思ったが・・・これだけだとわからんな。
グラフになっていたら、


BIP91はSegwit2Xとかいう、segwitもやる、ブロックサイズも倍にする、という話が発端だったと思う。
先にsegwitに対応して、3ヶ月後くらいにブロックサイズを倍にするんだっけ。
UASF・Segwit2x・Bitcoin Unlimited:闘いの果てに | ビットコインの最新情報 BTCN|ビットコインニュース
でも、そういうのはBIP91には書かれてなさそうだから、そっちはそっちでまたあるのかね。


やっぱりよくわからんが、理解できるように追いかけなかったのは正解だった。。
こんだけ情報が早いと、ちょっとついて行けんねぇ。

[zybo]PetaLinuxでDigilentのチュートリアルが動かん (6)

メモ。

前回、petalinux-create -t modulesでドライバのテンプレートを追加したが、ビルド時にエラーが出た。



AR# 68502: 2016.4 PetaLinux: Creating template module using underscores in naming convention causes build failures

名前にアンダーバーが入ってるとエラーになるって??
と思ったが、私は「led8drv」にしたから、入ってなかった。

ともかく、PetaLinuxというよりは、Yoctoに由来するエラーのようなので、そこら辺から探していくのがよいだろう。