Up カメラの有効化 ── Ubuntu の場合 作成: 2021-02-27
更新: 2021-03-01


    Raspberry Pi (Ubuntu) に,カメラケーブルでカメラを接続する。

    mjpg-stream や motion は,デバイス v4l2 (Video for Linux Two) 対応のカメラモジュールを扱う。。

    v4l2 の存在チェック
      $ sudo apt install libv4l-dev
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      libv4l-dev is already the newest version (1.18.0-2build1).
      0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


    v4l-utils をインストール
      $ sudo apt install v4l-utils

    v4l-utils で<接続が認識されているカメラ一覧>を表示:
      $ v4l2-ctl --list-devices
      bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 Cannot open device /dev/video0, exiting.
    カメラは認識されていない。


    カメラが認識されるとは,カメラがデバイス /dev/video0 になることである。
    「カメラ有効化の設定」とは,こうなるようにする設定のことである。

    この設定は,
      /boot/firmware/config.txt
    の [all] のところに,つぎの2行を追加することである:
        start_x=1
        gpu_mem=128  
    ここで,gpu_mem は,GPU に割り当てるメモリ。
    config.txt につぎの警告がある:
    # Please DO NOT modify this file;
    # if you need to modify the boot config,
    # the "usercfg.txt" file is the place to include user changes.
    実際,config.txt の最後が,つぎの1行になっている:
      include usercfg.txt

    これを信じて /boot/firmware/usercfg.txt の方に上の2行を書いてもダメ。 config.txt に直接書くことが必要


    この設定をして reboot すれば,/dev/video0 ができている:
      ~$ ls /dev | grep video
        video0 video10 video11 video12 video13 video14 video15 video16
    そして,カメラがつぎのように認識されている:
      $ v4l2-ctl --list-devices
      bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 /dev/media1 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 /dev/media0 mmal service 16.1 (platform:bcm2835-v4l2): /dev/video0

    ネット上には,/dev/video0 を表示させる how to 論が数多(あまた)あるが,以上がソルーションである。
    ──他のことをするのは,無駄で終わるだけでなく,システムを汚してしまうことになる。


    解説
    (Boot options in config.txt より)
  • start_x=1 implies start_file=start_x.elf fixup_file=fixup_x.dat
  • start_x=1 should be specified when using the camera module.
      Enabling the camera via raspi-config will set this automatically.

    (Memory options in config.txt より)
  • start_x=1 implies start_file=start_x.elf fixup_file=fixup_x.dat
  • gpu_mem Specifies how much memory, in megabytes, to reserve for the exclusive use of the GPU: the remaining memory is allocated to the ARM CPU for use by the OS.
  • The memory allocated to the GPU is used for display, 3D, Codec and camera purposes as well as some basic firmware housekeeping. The maximums specified below assume you are using all these features.
  • The recommended maximum values are as follows:
      total RAM gpu_mem
      256MB 128
      512MB 384
      ≧1GB 512


    但し,Raspberry Pi 3 B (1GB) の場合,gpu_mem を 512 に設定してみると,GUI がほとんどフリーズ状態になる。
    gpu_mem の設定は,単純な話ではないということである。


    備考
    「start_x=1」は,カメラの認識に関わる。
    ──これを設定しないと,カメラは認識されない。

    では,設定を「start_x=1」だけにして,「gpu_mem = 128」を設定しないとどうなるか (デフォルトは 76MB)?
    カメラは認識されるが,例えば mjpg-streamer は,つぎのようになって起動に至らない:
    MJPG Streamer Version: git rev: 310b29f4a94c46652b20c4b7b6e5cf24e532af39 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 1600 x 1200 i: Frames Per Second.: 1 i: Format............: YUYV i: JPEG Quality......: 100 i: TV-Norm...........: DEFAULT o: www-folder-path......: /home/ubuntu/mjpg-streamer/www/ o: HTTP TCP port........: 8080 o: HTTP Listen Address..: (null) o: username:password....: disabled o: commands.............: enabled libv4l2: error turning on stream: Operation not permitted Unable to start capture: Operation not permitted i: Can't enable video in first time i: cleaning up resources allocated by input thread
    ここで「gpu_mem = 128」を設定すると,起動が成る。
    かくして,「gpu_mem = 128」の設定は必須である。






"; ?>