Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tty-Treiber 2.17 HmIP/multimacd für Raspbian Jessie? #33

Open
hobbyquaker opened this issue Apr 13, 2016 · 48 comments
Open

tty-Treiber 2.17 HmIP/multimacd für Raspbian Jessie? #33

hobbyquaker opened this issue Apr 13, 2016 · 48 comments

Comments

@hobbyquaker
Copy link
Contributor

Wenn ich das richtig gehört/verstanden habe benötigt die 2.17 Firmware noch einen speziellen low-latency tty-Treiber damit crRFD/multimacd funktioniert? Ist das richtig? Wenn ja - ist dieser Treiber schon hier im Repo?

@hobbyquaker
Copy link
Contributor Author

e60183f

@leonsio
Copy link

leonsio commented Apr 18, 2016

Ich würde nicht so schnell den Thread schließen, das beigefügte Treiber für eq3loop lässt sich mit kleinen Korrekturen auf einem neueren Kernel ab 3.10 bauen, mxs_raw Treiber ist aber für den Betrieb mit aktuellen Treibern nicht geeignet :(, das Ganze Proc geraffel muss umgeschrieben werden

@eq-3-occu
Copy link
Collaborator

Der mxs_raw Treiber ist ein CCU2 spezifischer Treiber. Der mxs_raw Treiber greift direkt auf die UART Hardware des ARM SOC zu. Eine Version für den Raspberry PI 2 habe ich soeben im RaspberryMatic Repro zur Verfügung gestellt (https://github.com/eq-3/RaspberryMatic/blob/master/linux-4.1/drivers/char/broadcom/bcm2835_raw_uart.c)

@hobbyquaker hobbyquaker reopened this Apr 19, 2016
@leonsio
Copy link

leonsio commented Apr 19, 2016

Danke für die schnelle Bereitstellung, habe den Code durch den Compiler auf aktuellen Raspbian gejagt und es läuft ohne Probleme durch, allerdings habe ich keinen Device unter /dev oder müsste ich den selbst anlegen?

root@rpi2:/home/pi# make clean
make -C /lib/modules/4.4.7-v7+/build M=/home/pi clean
make[1]: Entering directory '/usr/src/linux-headers-4.4.7-v7+'
  CLEAN   /home/pi/.tmp_versions
  CLEAN   /home/pi/Module.symvers
make[1]: Leaving directory '/usr/src/linux-headers-4.4.7-v7+'
root@rpi2:/home/pi# make
make -C /lib/modules/4.4.7-v7+/build M=/home/pi modules
make[1]: Entering directory '/usr/src/linux-headers-4.4.7-v7+'
  CC [M]  /home/pi/bcm2835_raw_uart.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/pi/bcm2835_raw_uart.mod.o
  LD [M]  /home/pi/bcm2835_raw_uart.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.4.7-v7+'

entsprechend kommt multimac nur bedingt hoch. auch wenn ich das device selbst anlege nicht
multimac: FastMacResponder could not open port /dev/bcm2835_raw_uart.0: No such device

@leonsio
Copy link

leonsio commented Apr 19, 2016

Auch auf einem 4.1er Kernel kommt das Device nicht hoch, oder verstehe/mache ich etwas falsch?

Linux raspberrypi 4.1.20-v7+ #867 SMP Wed Mar 23 20:12:32 GMT 2016 armv7l GNU/Linux

@eq-3-occu
Copy link
Collaborator

Habt ihr den original Treiber für den UART im Kernel abgeschaltet (bzw. das Modul nicht geladen)?
Bevor der multimacd gestartet wird, muss das Device /dev/bcm2835-raw-uart vorhanden sein. Falls nicht, läuft was beim laden des bcm2835_raw_uart.ko falsch.

@leonsio
Copy link

leonsio commented Apr 20, 2016

Ich habe das Quelltest um einige Debug Nachrichten erweitert, leider ohne Erfolg.

so wird die Methode "init" ausgeführt, dadrin die Funktion platform_driver_register aufgerufen, welche 0 als Rückgabewert ausspuckt, danach kommt leider nichts.
Ich habe ebenfalls in "bcm2835_raw_uart_probe" einiges an Debug Outputs angegeben (z.B. gleich ein "printk" beim start), in kernel Logs sind jedoch keinerlei Meldungen zu finden, so als ob die Methode garnicht aufgerufen wurde.

Auf dem System sind neben HM-MOD-RPI-PCB keine weiteren Module angesteckt.

Anbei lsmod Output wenn Module geladen wurde

root@rpi2:/dev# lsmod 
Module                  Size  Used by
bcm2835_raw_uart        9746  0 
cfg80211              419038  0 
rfkill                 16037  1 cfg80211
8021q                  19347  0 
garp                    5389  1 8021q
bridge                 91698  0 
stp                     1643  2 garp,bridge
llc                     3563  3 stp,garp,bridge
snd_bcm2835            24948  0 
snd_pcm                73870  1 snd_bcm2835
snd_timer              19032  1 snd_pcm
snd                    51237  3 snd_bcm2835,snd_timer,snd_pcm
bcm2835_gpiomem         3040  0 
bcm2835_wdt             3225  0 
uio_pdrv_genirq         3100  0 
uio                     8000  1 uio_pdrv_genirq
tun                    18430  0 
ipv6                  347447  29 bridge

sowie /dev/

root@rpi2:/dev# ls -al
insgesamt 4
drwxr-xr-x 15 root root        3280 Apr 20 14:31 .
drwxr-xr-x 22 root root        4096 Apr 18 16:57 ..
crw-------  1 root root     10, 235 Apr 20 14:30 autofs
drwxr-xr-x  2 root root         580 Apr 20 14:30 block
crw-------  1 root root     10, 234 Apr 20 14:30 btrfs-control
drwxr-xr-x  3 root root          60 Jan  1  1970 bus
crw-------  1 root root     10,  63 Apr 20 14:30 cachefiles
drwxr-xr-x  2 root root        2380 Apr 20 14:31 char
crw-------  1 root root      5,   1 Apr 20 14:31 console
crw-------  1 root root     10,  62 Apr 20 14:30 cpu_dma_latency
crw-------  1 root root     10, 203 Apr 20 14:30 cuse
drwxr-xr-x  6 root root         120 Apr 20 14:30 disk
crw-rw----  1 root video    29,   0 Apr 20 14:30 fb0
lrwxrwxrwx  1 root root          13 Jan  1  1970 fd -> /proc/self/fd
crw-rw-rw-  1 root root      1,   7 Apr 20 14:30 full
crw-rw-rw-  1 root root     10, 229 Apr 20 14:30 fuse
crw-rw----  1 root gpio    245,   0 Apr 20 14:30 gpiomem
crw-------  1 root root     10, 183 Apr 20 14:30 hwrng
lrwxrwxrwx  1 root root          25 Jan  1  1970 initctl -> /run/systemd/initctl/fifo
drwxr-xr-x  2 root root          60 Jan  1  1970 input
crw-r--r--  1 root root      1,  11 Apr 20 14:30 kmsg
lrwxrwxrwx  1 root root          28 Jan  1  1970 log -> /run/systemd/journal/dev-log
brw-rw----  1 root disk      7,   0 Apr 20 14:30 loop0
brw-rw----  1 root disk      7,   1 Apr 20 14:30 loop1
brw-rw----  1 root disk      7,   2 Apr 20 14:30 loop2
brw-rw----  1 root disk      7,   3 Apr 20 14:30 loop3
brw-rw----  1 root disk      7,   4 Apr 20 14:30 loop4
brw-rw----  1 root disk      7,   5 Apr 20 14:30 loop5
brw-rw----  1 root disk      7,   6 Apr 20 14:30 loop6
brw-rw----  1 root disk      7,   7 Apr 20 14:30 loop7
crw-rw----  1 root disk     10, 237 Apr 20 14:30 loop-control
drwxr-xr-x  3 root root          60 Apr 20 14:31 .lxc
drwxr-xr-x  2 root root          60 Apr 20 14:30 mapper
crw-r-----  1 root kmem      1,   1 Apr 20 14:30 mem
crw-------  1 root root     10,  59 Apr 20 14:30 memory_bandwidth
brw-rw----  1 root disk    179,   0 Apr 20 14:30 mmcblk0
brw-rw----  1 root disk    179,   1 Apr 20 14:30 mmcblk0p1
brw-rw----  1 root disk    179,   2 Apr 20 14:30 mmcblk0p2
drwxrwxrwt  2 root root          40 Jan  1  1970 mqueue
drwxr-xr-x  2 root root          60 Apr 20 14:30 net
crw-------  1 root root     10,  61 Apr 20 14:30 network_latency
crw-------  1 root root     10,  60 Apr 20 14:30 network_throughput
crw-rw-rw-  1 root root      1,   3 Apr 20 14:30 null
crw-------  1 root root    108,   0 Apr 20 14:30 ppp
crw-rw-rw-  1 root tty       5,   2 Apr 20 14:38 ptmx
drwxr-xr-x  2 root root           0 Jan  1  1970 pts
brw-rw----  1 root disk      1,   0 Apr 20 14:30 ram0
brw-rw----  1 root disk      1,   1 Apr 20 14:30 ram1
brw-rw----  1 root disk      1,  10 Apr 20 14:30 ram10
brw-rw----  1 root disk      1,  11 Apr 20 14:30 ram11
brw-rw----  1 root disk      1,  12 Apr 20 14:30 ram12
brw-rw----  1 root disk      1,  13 Apr 20 14:30 ram13
brw-rw----  1 root disk      1,  14 Apr 20 14:30 ram14
brw-rw----  1 root disk      1,  15 Apr 20 14:30 ram15
brw-rw----  1 root disk      1,   2 Apr 20 14:30 ram2
brw-rw----  1 root disk      1,   3 Apr 20 14:30 ram3
brw-rw----  1 root disk      1,   4 Apr 20 14:30 ram4
brw-rw----  1 root disk      1,   5 Apr 20 14:30 ram5
brw-rw----  1 root disk      1,   6 Apr 20 14:30 ram6
brw-rw----  1 root disk      1,   7 Apr 20 14:30 ram7
brw-rw----  1 root disk      1,   8 Apr 20 14:30 ram8
brw-rw----  1 root disk      1,   9 Apr 20 14:30 ram9
crw-rw-rw-  1 root root      1,   8 Apr 20 14:30 random
drwxr-xr-x  2 root root          60 Jan  1  1970 raw
crw-rw-r--  1 root root     10,  58 Apr 20 14:31 rfkill
lrwxrwxrwx  1 root root           7 Apr 20 14:30 serial0 -> ttyAMA0
drwxrwxrwt  2 root root          40 Jan  1  1970 shm
drwxr-xr-x  2 root root         140 Apr 20 14:30 snd
lrwxrwxrwx  1 root root          15 Jan  1  1970 stderr -> /proc/self/fd/2
lrwxrwxrwx  1 root root          15 Jan  1  1970 stdin -> /proc/self/fd/0
lrwxrwxrwx  1 root root          15 Jan  1  1970 stdout -> /proc/self/fd/1
crw-rw-rw-  1 root tty       5,   0 Apr 20 14:30 tty
crw--w----  1 root tty       4,   0 Apr 20 14:30 tty0
crw--w----  1 root tty       4,   1 Apr 20 14:31 tty1
crw--w----  1 root tty       4,  10 Apr 20 14:30 tty10
crw--w----  1 root tty       4,  11 Apr 20 14:30 tty11
crw--w----  1 root tty       4,  12 Apr 20 14:30 tty12
crw--w----  1 root tty       4,  13 Apr 20 14:30 tty13
crw--w----  1 root tty       4,  14 Apr 20 14:30 tty14
crw--w----  1 root tty       4,  15 Apr 20 14:30 tty15
crw--w----  1 root tty       4,  16 Apr 20 14:30 tty16
crw--w----  1 root tty       4,  17 Apr 20 14:30 tty17
crw--w----  1 root tty       4,  18 Apr 20 14:30 tty18
crw--w----  1 root tty       4,  19 Apr 20 14:30 tty19
crw--w----  1 root tty       4,   2 Apr 20 14:30 tty2
crw--w----  1 root tty       4,  20 Apr 20 14:30 tty20
crw--w----  1 root tty       4,  21 Apr 20 14:30 tty21
crw--w----  1 root tty       4,  22 Apr 20 14:30 tty22
crw--w----  1 root tty       4,  23 Apr 20 14:30 tty23
crw--w----  1 root tty       4,  24 Apr 20 14:30 tty24
crw--w----  1 root tty       4,  25 Apr 20 14:30 tty25
crw--w----  1 root tty       4,  26 Apr 20 14:30 tty26
crw--w----  1 root tty       4,  27 Apr 20 14:30 tty27
crw--w----  1 root tty       4,  28 Apr 20 14:30 tty28
crw--w----  1 root tty       4,  29 Apr 20 14:30 tty29
crw--w----  1 root tty       4,   3 Apr 20 14:30 tty3
crw--w----  1 root tty       4,  30 Apr 20 14:30 tty30
crw--w----  1 root tty       4,  31 Apr 20 14:30 tty31
crw--w----  1 root tty       4,  32 Apr 20 14:30 tty32
crw--w----  1 root tty       4,  33 Apr 20 14:30 tty33
crw--w----  1 root tty       4,  34 Apr 20 14:30 tty34
crw--w----  1 root tty       4,  35 Apr 20 14:30 tty35
crw--w----  1 root tty       4,  36 Apr 20 14:30 tty36
crw--w----  1 root tty       4,  37 Apr 20 14:30 tty37
crw--w----  1 root tty       4,  38 Apr 20 14:30 tty38
crw--w----  1 root tty       4,  39 Apr 20 14:30 tty39
crw--w----  1 root tty       4,   4 Apr 20 14:30 tty4
crw--w----  1 root tty       4,  40 Apr 20 14:30 tty40
crw--w----  1 root tty       4,  41 Apr 20 14:30 tty41
crw--w----  1 root tty       4,  42 Apr 20 14:30 tty42
crw--w----  1 root tty       4,  43 Apr 20 14:30 tty43
crw--w----  1 root tty       4,  44 Apr 20 14:30 tty44
crw--w----  1 root tty       4,  45 Apr 20 14:30 tty45
crw--w----  1 root tty       4,  46 Apr 20 14:30 tty46
crw--w----  1 root tty       4,  47 Apr 20 14:30 tty47
crw--w----  1 root tty       4,  48 Apr 20 14:30 tty48
crw--w----  1 root tty       4,  49 Apr 20 14:30 tty49
crw--w----  1 root tty       4,   5 Apr 20 14:30 tty5
crw--w----  1 root tty       4,  50 Apr 20 14:30 tty50
crw--w----  1 root tty       4,  51 Apr 20 14:30 tty51
crw--w----  1 root tty       4,  52 Apr 20 14:30 tty52
crw--w----  1 root tty       4,  53 Apr 20 14:30 tty53
crw--w----  1 root tty       4,  54 Apr 20 14:30 tty54
crw--w----  1 root tty       4,  55 Apr 20 14:30 tty55
crw--w----  1 root tty       4,  56 Apr 20 14:30 tty56
crw--w----  1 root tty       4,  57 Apr 20 14:30 tty57
crw--w----  1 root tty       4,  58 Apr 20 14:30 tty58
crw--w----  1 root tty       4,  59 Apr 20 14:30 tty59
crw--w----  1 root tty       4,   6 Apr 20 14:30 tty6
crw--w----  1 root tty       4,  60 Apr 20 14:30 tty60
crw--w----  1 root tty       4,  61 Apr 20 14:30 tty61
crw--w----  1 root tty       4,  62 Apr 20 14:30 tty62
crw--w----  1 root tty       4,  63 Apr 20 14:30 tty63
crw--w----  1 root tty       4,   7 Apr 20 14:30 tty7
crw--w----  1 root tty       4,   8 Apr 20 14:30 tty8
crw--w----  1 root tty       4,   9 Apr 20 14:30 tty9
crw-rw----  1 root dialout 204,  64 Apr 20 14:30 ttyAMA0
crw-------  1 root root      5,   3 Apr 20 14:30 ttyprintk
crw-------  1 root root     10, 239 Apr 20 14:30 uhid
crw-------  1 root root     10, 223 Apr 20 14:30 uinput
crw-rw-rw-  1 root root      1,   9 Apr 20 14:30 urandom
crw-------  1 root root    251,   0 Apr 20 14:30 vc-cma
crw-rw----  1 root video   248,   0 Apr 20 14:30 vchiq
crw-rw----  1 root video   249,   0 Apr 20 14:30 vcio
crw-------  1 root root    250,   0 Apr 20 14:30 vc-mem
crw-rw----  1 root tty       7,   0 Apr 20 14:30 vcs
crw-rw----  1 root tty       7,   1 Apr 20 14:30 vcs1
crw-rw----  1 root tty       7,   2 Apr 20 14:30 vcs2
crw-rw----  1 root tty       7,   3 Apr 20 14:30 vcs3
crw-rw----  1 root tty       7,   4 Apr 20 14:30 vcs4
crw-rw----  1 root tty       7,   5 Apr 20 14:30 vcs5
crw-rw----  1 root tty       7,   6 Apr 20 14:30 vcs6
crw-rw----  1 root tty       7, 128 Apr 20 14:30 vcsa
crw-rw----  1 root tty       7, 129 Apr 20 14:30 vcsa1
crw-rw----  1 root tty       7, 130 Apr 20 14:30 vcsa2
crw-rw----  1 root tty       7, 131 Apr 20 14:30 vcsa3
crw-rw----  1 root tty       7, 132 Apr 20 14:30 vcsa4
crw-rw----  1 root tty       7, 133 Apr 20 14:30 vcsa5
crw-rw----  1 root tty       7, 134 Apr 20 14:30 vcsa6
crw-------  1 root root     10, 137 Apr 20 14:30 vhci
crw-------  1 root root     10, 130 Apr 20 14:30 watchdog
crw-------  1 root root    253,   0 Apr 20 14:30 watchdog0
prw-r-----  1 root adm            0 Apr 20 14:31 xconsole
crw-rw-rw-  1 root root      1,   5 Apr 20 14:30 zero
root@rpi2:/dev# 

und dmesg

root@rpi2:/dev# dmesg 
[    0.000000] Booting Linux on physical CPU 0xf00
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.7-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #876 SMP Tue Apr 12 22:28:41 BST 2016
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Raspberry Pi 2 Model B Rev 1.1
[    0.000000] cma: Reserved 8 MiB at 0x3d800000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] On node 0 totalpages: 253952
[    0.000000] free_area_init_node: node 0, pgdat 808a9ec0, node_mem_map bcf3a000
[    0.000000]   Normal zone: 2232 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 253952 pages, LIFO batch:31
[    0.000000] [bcm2709_smp_init_cpus] enter (9520->f3003010)
[    0.000000] [bcm2709_smp_init_cpus] ncores=4
[    0.000000] PERCPU: Embedded 13 pages/cpu @bcef6000 s22336 r8192 d22720 u53248
[    0.000000] pcpu-alloc: s22336 r8192 d22720 u53248 alloc=13*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 251720
[    0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2709.boardrev=0xa01041 bcm2709.serial=0xc633bfd5 smsc95xx.macaddr=B8:27:EB:33:BF:D5 bcm2708_fb.fbswap=1 bcm2709.uart_clock=3000000 bcm2709.disk_led_gpio=47 bcm2709.disk_led_active_low=0 vc_mem.mem_base=0x3ea00000 vc_mem.mem_size=0x3f000000  dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Memory: 987896K/1015808K available (6278K kernel code, 428K rwdata, 1692K rodata, 476K init, 764K bss, 19720K reserved, 8192K cma-reserved)
[    0.000000] Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xbe800000 - 0xff800000   (1040 MB)
    lowmem  : 0x80000000 - 0xbe000000   ( 992 MB)
    modules : 0x7f000000 - 0x80000000   (  16 MB)
      .text : 0x80008000 - 0x807d0c60   (7972 kB)
      .init : 0x807d1000 - 0x80848000   ( 476 kB)
      .data : 0x80848000 - 0x808b30c8   ( 429 kB)
       .bss : 0x808b6000 - 0x809751ac   ( 765 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] Hierarchical RCU implementation.
[    0.000000]  Build-time adjustment of leaf fanout to 32.
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] Architected cp15 timer(s) running at 19.20MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x46d987e47, max_idle_ns: 440795202767 ns
[    0.000010] sched_clock: 56 bits at 19MHz, resolution 52ns, wraps every 4398046511078ns
[    0.000030] Switching to timer-based delay loop, resolution 52ns
[    0.000387] Console: colour dummy device 80x30
[    0.001550] console [tty1] enabled
[    0.001603] Calibrating delay loop (skipped), value calculated using timer frequency.. 38.40 BogoMIPS (lpj=192000)
[    0.001680] pid_max: default: 32768 minimum: 301
[    0.002109] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.002160] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.003395] Disabling cpuset control group subsystem
[    0.003474] Initializing cgroup subsys io
[    0.003537] Initializing cgroup subsys memory
[    0.003616] Initializing cgroup subsys devices
[    0.003669] Initializing cgroup subsys freezer
[    0.003721] Initializing cgroup subsys net_cls
[    0.003819] CPU: Testing write buffer coherency: ok
[    0.003930] ftrace: allocating 20911 entries in 62 pages
[    0.055608] CPU0: update cpu_capacity 1024
[    0.055684] CPU0: thread -1, cpu 0, socket 15, mpidr 80000f00
[    0.055724] [bcm2709_smp_prepare_cpus] enter
[    0.055875] Setting up static identity map for 0x8240 - 0x8274
[    0.058278] [bcm2709_boot_secondary] cpu:1 started (0) 17
[    0.058715] [bcm2709_secondary_init] enter cpu:1
[    0.058777] CPU1: update cpu_capacity 1024
[    0.058786] CPU1: thread -1, cpu 1, socket 15, mpidr 80000f01
[    0.059355] [bcm2709_boot_secondary] cpu:2 started (0) 18
[    0.059706] [bcm2709_secondary_init] enter cpu:2
[    0.059737] CPU2: update cpu_capacity 1024
[    0.059744] CPU2: thread -1, cpu 2, socket 15, mpidr 80000f02
[    0.060289] [bcm2709_boot_secondary] cpu:3 started (0) 17
[    0.060542] [bcm2709_secondary_init] enter cpu:3
[    0.060571] CPU3: update cpu_capacity 1024
[    0.060579] CPU3: thread -1, cpu 3, socket 15, mpidr 80000f03
[    0.060666] Brought up 4 CPUs
[    0.060778] SMP: Total of 4 processors activated (153.60 BogoMIPS).
[    0.060811] CPU: All CPU(s) started in HYP mode.
[    0.060841] CPU: Virtualization extensions available.
[    0.061768] devtmpfs: initialized
[    0.074526] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[    0.074857] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.075925] pinctrl core: initialized pinctrl subsystem
[    0.076732] NET: Registered protocol family 16
[    0.082515] DMA: preallocated 4096 KiB pool for atomic coherent allocations
[    0.089094] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[    0.089160] hw-breakpoint: maximum watchpoint size is 8 bytes.
[    0.089371] Serial: AMBA PL011 UART driver
[    0.089695] 3f201000.uart: ttyAMA0 at MMIO 0x3f201000 (irq = 87, base_baud = 0) is a PL011 rev2
[    0.090307] bcm2835-mbox 3f00b880.mailbox: mailbox enabled
[    0.166780] bcm2835-dma 3f007000.dma: DMA legacy API manager at f3007000, dmachans=0x1
[    0.168479] SCSI subsystem initialized
[    0.168766] usbcore: registered new interface driver usbfs
[    0.168900] usbcore: registered new interface driver hub
[    0.169079] usbcore: registered new device driver usb
[    0.175261] raspberrypi-firmware soc:firmware: Attached to firmware from 2016-04-12 22:30
[    0.202795] clocksource: Switched to clocksource arch_sys_counter
[    0.255755] FS-Cache: Loaded
[    0.256134] CacheFiles: Loaded
[    0.268568] NET: Registered protocol family 2
[    0.269860] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
[    0.270031] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
[    0.270250] TCP: Hash tables configured (established 8192 bind 8192)
[    0.270406] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.270495] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.270873] NET: Registered protocol family 1
[    0.271407] RPC: Registered named UNIX socket transport module.
[    0.271452] RPC: Registered udp transport module.
[    0.271484] RPC: Registered tcp transport module.
[    0.271515] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.272733] hw perfevents: enabled with armv7_cortex_a7 PMU driver, 5 counters available
[    0.274191] futex hash table entries: 1024 (order: 4, 65536 bytes)
[    0.289959] VFS: Disk quotas dquot_6.6.0
[    0.290361] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.293074] FS-Cache: Netfs 'nfs' registered for caching
[    0.294296] NFS: Registering the id_resolver key type
[    0.294421] Key type id_resolver registered
[    0.294456] Key type id_legacy registered
[    0.297549] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[    0.297804] io scheduler noop registered
[    0.297852] io scheduler deadline registered (default)
[    0.297947] io scheduler cfq registered
[    0.300724] BCM2708FB: allocated DMA memory fdc00000
[    0.300794] BCM2708FB: allocated DMA channel 0 @ f3007000
[    0.306599] Console: switching to colour frame buffer device 82x26
[    1.128456] bcm2835-rng 3f104000.rng: hwrng registered
[    1.130288] vc-cma: Videocore CMA driver
[    1.131936] vc-cma: vc_cma_base      = 0x00000000
[    1.133611] vc-cma: vc_cma_size      = 0x00000000 (0 MiB)
[    1.135192] vc-cma: vc_cma_initial   = 0x00000000 (0 MiB)
[    1.136990] vc-mem: phys_addr:0x00000000 mem_base=0x3ea00000 mem_size:0x3f000000(1008 MiB)
[    1.158555] brd: module loaded
[    1.170264] loop: module loaded
[    1.172746] vchiq: vchiq_init_state: slot_zero = 0xbdc80000, is_master = 0
[    1.175946] Loading iSCSI transport class v2.0-870.
[    1.178368] usbcore: registered new interface driver smsc95xx
[    1.180009] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    1.381835] Core Release: 2.80a
[    1.383304] Setting default values for core params
[    1.384785] Finished setting default values for core params
[    1.586680] Using Buffer DMA mode
[    1.588161] Periodic Transfer Interrupt Enhancement - disabled
[    1.589683] Multiprocessor Interrupt Enhancement - disabled
[    1.591242] OTG VER PARAM: 0, OTG VER FLAG: 0
[    1.592805] Dedicated Tx FIFOs mode
[    1.594661] WARN::dwc_otg_hcd_init:1047: FIQ DMA bounce buffers: virt = 0xbdc14000 dma = 0xfdc14000 len=9024
[    1.597821] FIQ FSM acceleration enabled for :
Non-periodic Split Transactions
Periodic Split Transactions
High-Speed Isochronous Endpoints
Interrupt/Control Split Transaction hack enabled
[    1.605819] dwc_otg: Microframe scheduler enabled
[    1.605894] WARN::hcd_init_fiq:413: FIQ on core 1 at 0x80438fe4
[    1.607553] WARN::hcd_init_fiq:414: FIQ ASM at 0x80439354 length 36
[    1.609163] WARN::hcd_init_fiq:439: MPHI regs_base at 0xbe87e000
[    1.610804] dwc_otg 3f980000.usb: DWC OTG Controller
[    1.612422] dwc_otg 3f980000.usb: new USB bus registered, assigned bus number 1
[    1.614085] dwc_otg 3f980000.usb: irq 62, io mem 0x00000000
[    1.615682] Init: Port Power? op_state=1
[    1.617216] Init: Power Port (0)
[    1.618991] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.620564] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.622124] usb usb1: Product: DWC OTG Controller
[    1.623683] usb usb1: Manufacturer: Linux 4.4.7-v7+ dwc_otg_hcd
[    1.625224] usb usb1: SerialNumber: 3f980000.usb
[    1.627673] hub 1-0:1.0: USB hub found
[    1.629204] hub 1-0:1.0: 1 port detected
[    1.631068] dwc_otg: FIQ enabled
[    1.631082] dwc_otg: NAK holdoff enabled
[    1.631093] dwc_otg: FIQ split-transaction FSM enabled
[    1.631131] Module dwc_common_port init
[    1.631524] usbcore: registered new interface driver usb-storage
[    1.633311] mousedev: PS/2 mouse device common for all mice
[    1.635711] bcm2835-cpufreq: min=600000 max=900000
[    1.637540] sdhci: Secure Digital Host Controller Interface driver
[    1.639068] sdhci: Copyright(c) Pierre Ossman
[    1.640956] sdhost: log_buf @ bdc13000 (fdc13000)
[    1.722882] mmc0: sdhost-bcm2835 loaded - DMA enabled (>1)
[    1.724829] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.726960] ledtrig-cpu: registered to indicate activity on CPUs
[    1.728718] hidraw: raw HID events driver (C) Jiri Kosina
[    1.730492] usbcore: registered new interface driver usbhid
[    1.732037] usbhid: USB HID core driver
[    1.734251] Initializing XFRM netlink socket
[    1.735836] NET: Registered protocol family 17
[    1.737513] Key type dns_resolver registered
[    1.739546] Registering SWP/SWPB emulation handler
[    1.742009] registered taskstats version 1
[    1.743789] vc-sm: Videocore shared memory driver
[    1.745267] [vc_sm_connected_init]: start
[    1.747044] vc_vchi_sm_init: failed to open VCHI service (-1)
[    1.747169] [vc_sm_connected_init]: failed to initialize shared memory service
[    1.750159] [vc_sm_connected_init]: end - returning -1
[    1.752032] of_cfs_init
[    1.753670] of_cfs_init: OK
[    1.756259] Waiting for root device /dev/mmcblk0p2...
[    1.780120] mmc0: host does not support reading read-only switch, assuming write-enable
[    1.785113] mmc0: new high speed SDHC card at address 59b4
[    1.787464] mmcblk0: mmc0:59b4 USDU1 15.0 GiB 
[    1.790265]  mmcblk0: p1 p2
[    1.822938] Indeed it is in host mode hprt0 = 00021501
[    1.914931] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    1.918094] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    1.928877] devtmpfs: mounted
[    1.931312] Freeing unused kernel memory: 476K (807d1000 - 80848000)
[    2.002848] usb 1-1: new high-speed USB device number 2 using dwc_otg
[    2.004813] Indeed it is in host mode hprt0 = 00001101
[    2.203232] usb 1-1: New USB device found, idVendor=0424, idProduct=9514
[    2.205122] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    2.207916] hub 1-1:1.0: USB hub found
[    2.209868] hub 1-1:1.0: 5 ports detected
[    2.335915] random: systemd urandom read with 52 bits of entropy available
[    2.343177] systemd[1]: systemd 215 running in system mode. (+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR)
[    2.347492] systemd[1]: Detected architecture 'arm'.
[    2.482855] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[    2.517244] NET: Registered protocol family 10
[    2.520999] systemd[1]: Inserted module 'ipv6'
[    2.526989] systemd[1]: Set hostname to <rpi2>.
[    2.583224] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
[    2.585077] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    2.589751] smsc95xx v1.0.4
[    2.657406] smsc95xx 1-1.1:1.0 eth0: register 'smsc95xx' at usb-3f980000.usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:33:bf:d5
[    3.136445] systemd[1]: Starting Forward Password Requests to Wall Directory Watch.
[    3.140587] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    3.144610] systemd[1]: Starting Remote File Systems (Pre).
[    3.149221] systemd[1]: Reached target Remote File Systems (Pre).
[    3.151274] systemd[1]: Starting Encrypted Volumes.
[    3.155638] systemd[1]: Reached target Encrypted Volumes.
[    3.157731] systemd[1]: Starting Arbitrary Executable File Formats File System Automount Point.
[    3.164676] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[    3.168847] systemd[1]: Starting Swap.
[    3.173425] systemd[1]: Reached target Swap.
[    3.175516] systemd[1]: Expecting device dev-mmcblk0p1.device...
[    3.179852] systemd[1]: Starting Root Slice.
[    3.184221] systemd[1]: Created slice Root Slice.
[    3.186126] systemd[1]: Starting User and Session Slice.
[    3.190327] systemd[1]: Created slice User and Session Slice.
[    3.192184] systemd[1]: Starting /dev/initctl Compatibility Named Pipe.
[    3.196469] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[    3.198394] systemd[1]: Starting Delayed Shutdown Socket.
[    3.202571] systemd[1]: Listening on Delayed Shutdown Socket.
[    3.204552] systemd[1]: Starting Journal Socket (/dev/log).
[    3.208602] systemd[1]: Listening on Journal Socket (/dev/log).
[    3.210416] systemd[1]: Starting udev Control Socket.
[    3.214498] systemd[1]: Listening on udev Control Socket.
[    3.216337] systemd[1]: Starting udev Kernel Socket.
[    3.220245] systemd[1]: Listening on udev Kernel Socket.
[    3.222081] systemd[1]: Starting Journal Socket.
[    3.226194] systemd[1]: Listening on Journal Socket.
[    3.228082] systemd[1]: Starting System Slice.
[    3.232106] systemd[1]: Created slice System Slice.
[    3.234042] systemd[1]: Starting File System Check on Root Device...
[    3.263730] systemd[1]: Starting system-systemd\x2dfsck.slice.
[    3.268405] systemd[1]: Created slice system-systemd\x2dfsck.slice.
[    3.270413] systemd[1]: Starting system-getty.slice.
[    3.274999] systemd[1]: Created slice system-getty.slice.
[    3.277392] systemd[1]: Starting Increase datagram queue length...
[    3.285344] systemd[1]: Starting Restore / save the current clock...
[    3.316395] systemd[1]: Mounting POSIX Message Queue File System...
[    3.326035] systemd[1]: Starting Create list of required static device nodes for the current kernel...
[    3.376900] systemd[1]: Started Set Up Additional Binary Formats.
[    3.380443] systemd[1]: Mounted Huge Pages File System.
[    3.382528] systemd[1]: Starting udev Coldplug all Devices...
[    3.412394] systemd[1]: Starting Load Kernel Modules...
[    3.425372] systemd[1]: Mounting Debug File System...
[    3.434304] systemd[1]: Starting Slices.
[    3.438736] systemd[1]: Reached target Slices.
[    3.446979] systemd[1]: Mounted POSIX Message Queue File System.
[    3.453620] systemd[1]: Mounted Debug File System.
[    3.459377] systemd[1]: Started Increase datagram queue length.
[    3.492876] systemd[1]: Started Create list of required static device nodes for the current kernel.
[    3.526511] tun: Universal TUN/TAP device driver, 1.6
[    3.528400] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
[    3.548492] systemd[1]: Started Restore / save the current clock.
[    3.555702] systemd[1]: Started Load Kernel Modules.
[    3.577312] systemd[1]: Time has been changed
[    3.618343] systemd[1]: Started udev Coldplug all Devices.
[    3.638617] systemd[1]: Started File System Check on Root Device.
[    3.771199] systemd[1]: Mounted FUSE Control File System.
[    3.773325] systemd[1]: Starting Apply Kernel Variables...
[    3.804073] systemd[1]: Mounting Configuration File System...
[    3.812376] systemd[1]: Starting Create Static Device Nodes in /dev...
[    3.821981] systemd[1]: Starting Syslog Socket.
[    3.827257] systemd[1]: Listening on Syslog Socket.
[    3.829403] systemd[1]: Starting Journal Service...
[    3.840758] systemd[1]: Started Journal Service.
[    4.055845] systemd-udevd[132]: starting version 215
[    5.550403] bcm2835-wdt 3f100000.watchdog: Broadcom BCM2835 watchdog timer
[    5.568919] gpiomem-bcm2835 3f200000.gpiomem: Initialised: Registers at 0x3f200000
[    6.111499] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    6.499781] systemd-journald[129]: Received request to flush runtime journal from PID 1
[    6.845124] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
[    6.845667] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    8.592057] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[    8.593022] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC1E1
[   14.099187] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
[   14.138356] 8021q: 802.1Q VLAN Support v1.8
[   14.179266] device eth0.2 entered promiscuous mode
[   14.185853] device eth0 entered promiscuous mode
[   14.198102] vlan.2: port 1(eth0.2) entered forwarding state
[   14.198180] vlan.2: port 1(eth0.2) entered forwarding state
[   14.848819] cfg80211: World regulatory domain updated:
[   14.848846] cfg80211:  DFS Master region: unset
[   14.848856] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
[   14.848871] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
[   14.848882] cfg80211:   (2457000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
[   14.848892] cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm), (N/A)
[   14.848906] cfg80211:   (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (N/A)
[   14.848919] cfg80211:   (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (0 s)
[   14.848930] cfg80211:   (5490000 KHz - 5730000 KHz @ 160000 KHz), (N/A, 2000 mBm), (0 s)
[   14.848940] cfg80211:   (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 2000 mBm), (N/A)
[   14.848951] cfg80211:   (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), (N/A)
[   14.852032] Adding 102396k swap on /var/swap.  Priority:-1 extents:3 across:151548k SSFS
[   15.175750] random: nonblocking pool is initialized
[   36.573129] bcm2835_raw_uart: init
[   36.573355] bcm2835_raw_uart: init platform_driver_register ret 0
root@rpi2:/dev# 

@eq-3-occu
Copy link
Collaborator

Auf die Schnelle fällt mir auf, dass in der Liste der Devices /dev/ttyAMA0 auftaucht. Der original Treiber scheint also aktiv zu sein. Die Konfiguration die wir für die RaspberryMatic verwenden findet sich unter https://github.com/eq-3/RaspberryMatic/blob/master/linux-4.1/arch/arm/configs/raspberrymatic_defconfig

@leonsio
Copy link

leonsio commented Apr 20, 2016

Danke für die Infos

Sollte es daran liegen, so schränkt es die Nutzung des Moduls extrem ein, man müsste, sofern man homematic IP nutzen möchte, einen neuen Kernel ohne amba_pl011 bauen.
Das Bauen des Moduls ist bereits für viele User zu aufwendig, auch wenn man fertigen kernel-headers als DEB Paket bekommt :( zumindest kann man das ohne Probleme Skripten ohne Risiko, dass Rpi nicht mehr hochkommt.
Einen eigenen Kernel oder Distribution für Homematic bereitzustellen finde ich mehr als unnötig. Die Idee war LXCCU auf aktuellen Debian Jessie zum laufen zu bringen. Bis auf Homematic-IP funktioniert bereits alles mit HM-MOD-RPI-PBC ;)

Die ttyAMA0 kommt von dem Treiber und lässt sich nicht deaktivieren. Auch wenn die Serielle Konsole bereits auf tty1 umgeleitet wurde, ist der Treiber im Kernel und wird beim Start geladen

[    0.088271] Serial: AMBA PL011 UART driver
[    0.088586] 3f201000.uart: ttyAMA0 at MMIO 0x3f201000 (irq = 87, base_baud = 0) is a PL011 rev2
[   14.384994] uart-pl011 3f201000.uart: no DMA platform data

Schade, ggf. findet ihr einen Weg die Module etwas "Benutzerfreundlicher" ;) zu machen

Gruß

Leo

Verweise:
http://longtermcache.blogspot.de/2013/04/mission-failed-disabling-uart.html

@leonsio
Copy link

leonsio commented Apr 20, 2016

Ich habe mir die Mühe gegeben aktuelles Kernel neu zu kompilieren ohne amba_pl011 Modul.
Das Modul habe ich in die Blacklist gepackt, so dass ttyAMA0 nicht erscheint.

Beim laden das gleiche Spiel platform_driver_register gibt 0 zurück, weitere Methoden/Funktionen werden nicht aufgerufen. Also sollte es nicht an dem Kernel liegen

@leonsio
Copy link

leonsio commented May 2, 2016

Hallo

git es etwas neues von der Baustelle? Ich kann das Modul zwar bauen, aber ein Interface erscheint nicht :(
würde gern die Homematic-IP als Teil meines Projektes : https://github.com/leonsio/YAHM bzw. http://homematic-forum.de/forum/viewtopic.php?f=26&t=30674 der Allgemeinheit zur Verfügung stellen

Gruß

Leo

@YoungCereal
Copy link

So trots das ich eine stunde eben im Stau gestanden habe, bin ich irgendwie gut drauf daher sage ich mal wo deine Probleme liegen.

Ich gehe jetzt mal davon aus das du die beiden Dateien aus dem raspberry Kernel also raspberrymatic integriert steht ja oben.

Aber wie schon gesagt ich bin gut drauf also:
Für alle die jetzt erst einschalten was bisher geschah ( sorry ich konnte es mir nicht verkneifen :) )

https://github.com/eq-3/RaspberryMatic/blob/master/linux-4.1/drivers/char/eq3_char_loop.c
https://github.com/eq-3/RaspberryMatic/blob/master/linux-4.1/drivers/char/broadcom/bcm2835_raw_uart.c

zudem müsst ihr die jeweiligen Änderungen in den Dateien machen

IN :/linux-4.1/drivers/char/broadcom/Makefile
EINFÜGEN: obj-$(CONFIG_BCM2835_RAW_UART) += bcm2835_raw_uart.o

IN: /linux-4.1/drivers/char/broadcom/Kconfig
EINFÜGEN:
config BCM2835_RAW_UART
tristate "BCM2835 UART raw driver"
depends on (MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835)
default m
help
This driver supports the BCM2835 UART port as raw character device.

IN: linux-4.1/drivers/char/Makefile
EINFÜGEN: obj-$(CONFIG_EQ3_CHAR_LOOPBACK) += eq3_char_loop.o

IN:/linux-4.1/drivers/char/Kconfig
EINFÜGEN:
config EQ3_CHAR_LOOPBACK
tristate "eQ3 char loopback device"
help
This driver provides a char loopback device used by eQ-3 daemons.

Beim 3. urüberlesen ich hätte doch die Patchdatei schreiben sollen XD.

Und so geht es in der heutigen Folge von ............. weiter :).

  1. Du hast die Kernel Integration nicht gemacht.
    Ich habe noch keine Patch dabei daraus gemacht daher verzeih mir das es nur der Auszug ist ( ist bei mir ein grösserer patch, aber man erkennt was gemeint ist )

IN:linux-4.1/arch/arm/mach-bcm2709/bcm2709.c
etwa bei
@@ -524,6 +524,29 @@ struct platform_device bcm2835_emmc_devi
};
#endif /* CONFIG_MMC_BCM2835 */

EINFÜGEN:


#if defined(CONFIG_BCM2835_RAW_UART) || defined(CONFIG_BCM2835_RAW_UART_MODULE)
static struct resource bcm2835_raw_uart_resources[] = {
        {
            .start = UART0_BASE,
            .end = UART0_BASE + 0x100 - 1,  /*HT: ??*/
            .flags = IORESOURCE_MEM,
        },
        {
            .start = IRQ_UART, /*TODO: Check*/
            .end = IRQ_UART,
            .flags = IORESOURCE_IRQ,
        }
};

static struct platform_device bcm2709_raw_uart_device = {
    .name = "bcm2835-raw-uart",
    .id = 0,
    .resource = bcm2835_raw_uart_resources,
    .num_resources = ARRAY_SIZE(bcm2835_raw_uart_resources),
};
#endif

und dann Zeile steht ja da:

@@ -931,6 +954,10 @@ void __init bcm2709_init(void)
bcm2709_init_led();
bcm2709_init_uart1();

Einfügen:

#if defined(CONFIG_BCM2835_RAW_UART) || defined(CONFIG_BCM2835_RAW_UART_MODULE)
    bcm_register_device(&bcm2709_raw_uart_device);  /*HT*/
#endif /*defined(CONFIG_BCM2835_RAW_UART) || defined(CONFIG_BCM2835_RAW_UART_MODULE)*/
/* Only create the platform devices for the ALSA driver in the
   absence of an enabled "audio" DT node */
if (!use_dt ||

@@ -1158,6 +1185,7 @@ static inline void bcm2709_init_led(void

  1. Du musst die richtige Firmware hochladen auf den chip das ist nicht
    occu/firmware/HM-MOD-UART/coprocessor_update.eq3 die ist nur homematic
    sondern
    occu/firmware/HM-MOD-UART/dualcopro_si1002_update_blhm.eq3
    einfach die Kommentare in der fwmap ändern.
  2. Angabe des seriellen drivers in:
    occu/arm-gnueabihf/packages-eQ-3/RFD/etc/crRFD.conf
    muss ich wiederhole muss Adapter.1.Port=/dev/ttyS0

und in:
occu/arm-gnueabihf/packages-eQ-3/RFD/etc/config_templates/multimacd.conf

Coprocessor Device Path = /dev/bcm2835-raw-uart nicht bcm2835-raw-uart.0
Loop Slave Device HmIP = ttyS0

danach werden alle driver erstellt und auch erkannt ( allerdings gehen die Probleme dann immer noch weiter oder vielleicht auch erst los wer weiss ;) ).
Stabil läuft es nicht allerdings konnte ich Homematic IP Geräte anlernen und schalten.

*Dies kann für nicht hardware heute einfach übersprungen werden
Und für all die die es wissen wollen. *

*1. WARUM ZUM TEUFEL TTYS0 *
Eq3 überschreibt die Hauptdatei des Raspberry drivers der CPU um somit einen switch einzubauen für alte und neue Sachen da es sich um das Original Raspberry Driver Konstrukt handelt muss es ttyS0 gennant werden.

*2. Warum 2 firmware im Upload *
Ich habe keine Ahnung warum eine HM only Firmware und warum eine Dualstack firmware, und es hat mit viel frustration zu tun wie ich da drauf gekommen aber das ist eine Story für das nächste mal.

Nur zur info getestet habe ich das von Kernel 4.1 - Kernel 4.4 auf Raspberry.

Ach du Schande dieser Editor zum schreien ist der horror. Ist grösser geworden als ich vor hatte, egal ich hoffe es hilft dir.

Gruß
Michael

@leonsio
Copy link

leonsio commented May 2, 2016

Hi

Danke ich versuche es morgen durchzuspielen, wenn ich wieder nüchtern bin.
Sieht aber mit bisschen Alkohol im Blut nachvollziehbar;)

Loop device habe ich bereits zum laufen bekommen und bin bis jetzt am uart device gescheitert

@leonsio
Copy link

leonsio commented May 3, 2016

grr finde es zum Kotzen, dass nicht alles als Modul geliefert wird und an den original Kernel-Source Veränderung durchführt :(
hab versucht die Änderungen aus der bcm2709.c in das Modul einzubauen und komme zumindest nun weiter, aber nicht zum gewünschten Ergebnis :(

[217197.965549] bcm2835_raw_uart: get clock.
[217197.965560] bcm2835_raw_uart: Unable to get device clock
[217197.965594] bcm2835-raw-uart: probe of bcm2835-raw-uart.0 failed with error -2

Nachtrag
auf rpi3 mit Kernel-Header von https://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/ (4.1) wird das Modul gebaut und geladen. Auf rpi2 hatte ich Kernel-Sourcen ausm GIT(4.4)

[2225794.653233] bcm2835_raw_uart: get clock.
[2225794.653241] bcm2835_raw_uart: get ressource.
[2225794.653245] bcm2835_raw_uart: create character device.
[2225794.653254] bcm2835_raw_uart: create class.
[2225794.653289] bcm2835_raw_uart: device create .
[2225794.653428] bcm2835_raw_uart: Driver successfully loaded.

falls Interesse besteht

suche:

  m_bcm2835_raw_uart_port = NULL;

  printk( KERN_ERR "bcm2835_raw_uart: Unable to remove platform device\n" );
  return -EFAULT;

}

Lösche alles bis zum Ende bzw, ersetze es durch



#include <../arch/arm/mach-bcm2709/include/mach/platform.h>
#define IRQ_ARMCTRL_START     0
#define ARM_IRQ0_BASE                  64
#define INTERRUPT_UART                 (ARM_IRQ0_BASE + 19)
#define IRQ_UART              (IRQ_ARMCTRL_START + INTERRUPT_UART)




static struct resource bcm2835_raw_uart_resources[] = {
        {
            .start = UART0_BASE,
            .end = UART0_BASE + 0x100 - 1,  /*HT: ??*/
            .flags = IORESOURCE_MEM,
        },
        {
            .start = IRQ_UART, /*TODO: Check*/
            .end = IRQ_UART,
            .flags = IORESOURCE_IRQ,
        }
};

static struct platform_device bcm2709_raw_uart_device = {
    .name = "bcm2835-raw-uart",
    .id = 0,
    .resource = bcm2835_raw_uart_resources,
    .num_resources = ARRAY_SIZE(bcm2835_raw_uart_resources),
};



/*!
 ******************************************************************************
 * @brief Init function of the driver
 *
 * @return 0 or error
**/
static int __init bcm2835_raw_uart_init(void)
{

  int ret;

    ret = platform_device_register( &bcm2709_raw_uart_device );
    if( ret )
    {
      printk(KERN_ERR "bcm2835_raw_uart: Failed to register platform driver (%i)\n", ret );
      goto out;
    }

    ret = platform_driver_register( &m_bcm2835_raw_uart_driver );
    if( ret )
    {
      printk(KERN_ERR "bcm2835_raw_uart: Failed to register platform driver (%i)\n", ret );
      goto out;
    }

    return 0;

out:
  return ret;
}



/*!
 ******************************************************************************
 * @brief Exit function of the driver
 *
**/
static void __exit bcm2835_raw_uart_exit(void)
{
    platform_driver_unregister( &m_bcm2835_raw_uart_driver );
    platform_device_unregister( &bcm2709_raw_uart_device );
}

module_init( bcm2835_raw_uart_init );
module_exit( bcm2835_raw_uart_exit );
MODULE_DESCRIPTION( "eQ-3 raw BCM2835 uart driver" );
MODULE_LICENSE( "GPL" );
MODULE_AUTHOR( "eQ-3 Entwicklung GmbH" );

Damit wird zumindest das RAW Device angelegt, ob es auch tatsächlich funktioniert kann ich mangels HM-IP Geräte nicht testen (wollte es Vollständigkeit weise gebaut haben)
Ob man die Änderungen auch schöner machen kann, will ich nicht bestreiten ;) bin kein C/Kernel Entwickler

@leonsio
Copy link

leonsio commented May 21, 2016

Schon wer erfolgreich das Modul auf 4.4er Kernel zum Laufen bekommen?

@jens-maus
Copy link

Im Zuge der Arbeiten an RaspberryMatic (http://github.com/jens-maus/RaspberryMatic) habe ich mir nun auch die besagten kernel module angeschaut und auch für Kernel 4.4 mit den hier genannten Änderungen kompiliert bekommen. Während das eq3_char_loop.ko wunderbar zu funktionieren scheint und das /dev/eq3loop nach dem modprobe auftaucht bekomme ich die gleichen Probleme wie @leonsio mit dem laden des bcm2835_raw_uart.ko:

[  437.539823] bcm2835_raw_uart: Unable to get device clock
[  437.539958] bcm2835-raw-uart: probe of bcm2835-raw-uart.0 failed with error -2

Gibt es denn schon neuere Erkenntnisse was hier genau geändert werden müsste damit das Modul mit einem aktuellen Kernel 4.4 korrekt funktioniert und das /dev device dafür dann korrekt initialisiert wird? Wenn nicht müsste ich mir das hier mal schrittweise nochmal anschauen – wollte aber erst einmal hier nachfragen ob es neuere Infos gibt?!? Die Arbeiten bzgl. RaspberryMatic und den kernel modules kann hier (https://github.com/jens-maus/RaspberryMatic/tree/master/buildroot-external/package/homematic/kernel-modules) eingesehen werden.

@jens-maus
Copy link

Nach etwas eigener Analyse der Situation und des Fehlers warum das bcm2835_raw_uart kernel modul nicht laden wollte hab ich nun einen Weg gefunden das Modul zum korrekten laden bei Kernel Versionen >= 4.3 gefunden. Siehe hier:

jens-maus/RaspberryMatic@c188573

Das problem war hierbei das in Kernel 4.3 anscheinend der "dev:f1" clock provider für die UART clock entfernt wurde und das Modul nun selbst eine fixed clock generieren muss. Der hier genannte Patch sollte das Problem beheben. Ob das allerdings nun final zum erfolg geführt hat das HmIP Komponenten damit auch laufen kann ich selbst leider noch nicht sagen.

@leonsio
Copy link

leonsio commented Dec 11, 2016

ich baue dies ins YAHM ein und lasse die Community testen, habe selbst keine IP Geräte im Einsatz

@jens-maus
Copy link

Wunderbar, mach das. Die aktuellen Quellen der kernel-module für Kernel 4.4 angepasst findest du übrigens hier:

https://github.com/jens-maus/RaspberryMatic/tree/master/buildroot-external/package/homematic/kernel-modules

Eine Warnung diesbzgl. hab ich aber bereits (vor allem da du diese ja in deiner container-Lösung einsetzen willst): das bcm2835-raw-uart Modul macht es notwendig einen Host kernel (d.h. bei dir von Raspbian) einzusetzen bei dem der PL011 UART driver komplett deaktiviert ist bzw. als Modul kompiliert ist und nicht in den kernel reinkompiliert ist. D.h. beim hochfahren darf es weder /dev/ttyAMA0 noch /dev/ttyS0 geben. Im grunde heisst das dann das du mitunter einen eigenen Kernel mit YAHM ausliefern musst wenn HmIP funktionieren soll - und dieser muss auch Bluetooth entsprechend abschalten. Aktuell hab ich auch gerade für den RPi3 noch gewisse Probleme mit dem Modul die ich mir gerade anschaue.

@ToSa27
Copy link

ToSa27 commented Dec 26, 2016

Ich habe versucht das alles auf einem frischen Pi2 (um die Pi3 Probleme erstmal zu umgehen) mit Jessie Lite nachzuvollziehen. Kernel kompiliert ohne PL011, die zwei Module kompiliert und installiert. Bis hier alles problemlos: die standard devices ttyAMA0 und ttyS0 tauchen nicht mehr im device tree auf, dafür aber bcm2835-raw-uart und eq3loop wenn ich die entsprechenden Module starte.

Ich bekomme allerdings multimacd und rfd nicht richtig zum laufen. Beide werden zwar ausgeführt, aber die rfd.log liefert

2016/12/26 11:24:19.122 <Info> BidCoS-Service started
2016/12/26 11:24:19.123 <Info> XmlRpc Server is listening on TCP port 2001
2016/12/26 11:24:19.127 <Debug> CCU2CommController::init() - Legacy initialization.
2016/12/26 11:24:24.128 <Debug> () CCU2CommController::startCoprocessorApp(): Trying to start coprocessor application
2016/12/26 11:24:29.130 <Fatal error> CCU2CommController::init(): Init failed. Cannot start coprocessor application.
2016/12/26 11:24:29.130 <Error> () CCU2CommController::setCSMACAEnabled(): Error disabling CSMA/CA.
2016/12/26 11:24:29.131 <Error> No BidCoS-Interface available
2016/12/26 11:24:29.132 <Warning> Error initializing interfaces

Mein Verständnis aus dem PDF von eq3 war dass der multimacd das slave device /dev/mmd_bidcos anlegt, das passiert aber anscheinend nicht. Muss ich /dev/mmd_bidcos stattdessen manuell erzeugen? Die multimacd.conf seht so aus:

Coprocessor Device Path = /dev/bcm2835-raw-uart
#Cuse Device Name = ttyS0
Log Level = 3
Log Identifier = multimac
Log Destination = Syslog
HmIP Cmdline Pattern = */crRFD*
Bidcos Cmdline Pattern = *rfd -c*
Transparent Cmdline Pattern = *update*
Bidcos Exe Pattern = */bin/rfd
Default Subsystem = HmIP
Loop Master Device = /dev/eq3loop
Loop Slave Device Bidcos = mmd_bidcos
Loop Slave Device HmIP = ttyS0

In def .../firmware/HM-MOD-UART/fwmap steht
CCU2 dualcopro_si1002_update_blhm.eq3 2.2.1 #Dual CoProzessor CCU2
(die .../firmware/fwmap habe ich unverändert belassen, hoffe das war richtig).

Beim Versuch das FW-update manuell anzustossen mit eq3configcmd update-coprocessor kommen nur Fehlermeldungen. Selbst nur die Abfrage der installierten Version fühgt zu fehlern:

2016/12/26 16:28:41.851 <Debug> firmware filename is: dualcopro_si1002_update_blhm.eq3
2016/12/26 16:28:44.353 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 16:28:44.353 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 16:28:44.353 <Debug> () CCU2CommControllerMod::startCoprocessorApp(): Trying to start coprocessor application
2016/12/26 16:28:46.354 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 16:28:46.354 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 16:28:48.355 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 16:28:48.355 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 16:28:49.354 <Error> CoprocessorUpdate::startApplication():Could not start Coprocessor application.
2016/12/26 16:28:49.355 <Error> Could not start Application, maybe no application on device, do update with dummy Version: 0.0.0

RFD hat vorher mit dem Modul im "Homematic-Only" Betrieb einwandfrei funktioniert, deshalb glaube ich nicht dass keinerlei FW auf dem Modul installiert ist.

Ich stehe auf dem Schlauch - bin für jeglichen Tipp dankbar!!! Wahrscheinlich sehe ich den Baum vor lauter Bäumen nicht.

@jens-maus
Copy link

Bevor man sich an das starten von RFD/multimac macht sollte man in der Tat erst einmal die Abfrage der aktuellen Firmware version mittels eq3configcmd hinbekommen – ansonsten muss RFD/multimac starten schief gehen. Dazu den Pi2 frisch mit dem PL011 abgeschalteten Kernel hochfahren, dann das modprobe bcm2835_raw_uart manuell ausführen und dann sollte folgendes Kommando die Firmware version ausgeben:

eq3configcmd update-coprocessor -p /dev/bcm2835-raw-uart -c -v

Wenn das schon nicht klappt, dann funktioniert das bcm2835-raw-uart kernel Modul nicht korrekt. Welche Quellen dieses Modules hast du denn verwendet? Und welche Kernel version nutzt du denn exakt? Kann gut sein das das im Grunde ein ähnliches Problem ist wie das noch aktuelle Problem mit dem RaspberryPi3 und RaspberryMatic. Zusätzlich kann man nach laden des modules und dem ersten nutzen des devices auch noch in /proc/interrupts und /proc/iomem schauen ob die Ressourcen für das kernel Modul richtig zugewiesen sind. Das ganze muss ähnlich wie diesem aussehen:

# cat /proc/interrupts 
[...]
 87:     168065          0          0          0  ARMCTRL-level  89 Edge      bcm2835-raw-uart.0
# cat /proc/iomem 
3f201000-3f201fff : bcm2835-raw-uart
  3f201000-3f201fff : /soc/uart@7e201000

Auf einem RPi3 unter RaspberryMatic wird die ausgabe des IRQ z.B. nicht gezeigt wieso ich immer noch denke das da irgendetwas prinzipielles beim Ressourcen allokieren im kernel Modul schief geht bzw. nicht ganz auf die Bedingungen in neueren Linux kernel Versionen abgestimmt ist.

@ToSa27
Copy link

ToSa27 commented Dec 26, 2016

Ich habe die für Kernel 4.4 angepassten Quellen aus deinem Link oben genommen. Kernel Version ist 4.4.39-v7+. Die Resourcenzuordnung war anscheinend ein Volltreffer - in /proc/interrupts kein Zeichen von bcm2835-raw-uart (/proc/iomem scheint ok).

Neustart ohne "Ballast":

$ sudo insmod bcm2835_raw_uart.ko

$ sudo lsmod
Module                  Size  Used by
bcm2835_raw_uart        9660  0
cfg80211              428393  0
rfkill                 16018  1 cfg80211
snd_bcm2835            20447  0
snd_pcm                75890  1 snd_bcm2835
snd_timer              19288  1 snd_pcm
snd                    51908  3 snd_bcm2835,snd_timer,snd_pcm
bcm2835_wdt             3225  0
bcm2835_gpiomem         3040  0
uio_pdrv_genirq         3164  0
uio                     8000  1 uio_pdrv_genirq
ipv6                  347537  36

$ ls /dev
autofs            fuse     loop7               ptmx   ram6    tty1   tty22  tty35  tty48  tty60      vc-mem  vcsa6
bcm2835-raw-uart  gpiomem  loop-control        pts    ram7    tty10  tty23  tty36  tty49  tty61      vcs     vcsm
block             hwrng    mapper              ram0   ram8    tty11  tty24  tty37  tty5   tty62      vcs1    vhci
btrfs-control     initctl  mem                 ram1   ram9    tty12  tty25  tty38  tty50  tty63      vcs2    watchdog
bus               input    memory_bandwidth    ram10  random  tty13  tty26  tty39  tty51  tty7       vcs3    watchdog0
cachefiles        kmsg     mmcblk0             ram11  raw     tty14  tty27  tty4   tty52  tty8       vcs4    xconsole
char              log      mmcblk0p1           ram12  rfkill  tty15  tty28  tty40  tty53  tty9       vcs5    zero
console           loop0    mmcblk0p2           ram13  shm     tty16  tty29  tty41  tty54  ttyprintk  vcs6
cpu_dma_latency   loop1    mqueue              ram14  snd     tty17  tty3   tty42  tty55  uhid       vcsa
cuse              loop2    net                 ram15  stderr  tty18  tty30  tty43  tty56  uinput     vcsa1
disk              loop3    network_latency     ram2   stdin   tty19  tty31  tty44  tty57  urandom    vcsa2
fb0               loop4    network_throughput  ram3   stdout  tty2   tty32  tty45  tty58  vc-cma     vcsa3
fd                loop5    null                ram4   tty     tty20  tty33  tty46  tty59  vchiq      vcsa4
full              loop6    ppp                 ram5   tty0    tty21  tty34  tty47  tty6   vcio       vcsa5

$ cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
 16:          0          0          0          0  bcm2836-timer   0 Edge      arch_timer
 17:       7026      10919       4294      11088  bcm2836-timer   1 Edge      arch_timer
 23:         63          0          0          0  ARMCTRL-level   1 Edge      3f00b880.mailbox
 24:          2          0          0          0  ARMCTRL-level   2 Edge      VCHIQ doorbell
 39:          1          0          0          0  ARMCTRL-level  41 Edge
 46:          0          0          0          0  ARMCTRL-level  48 Edge      bcm2708_fb dma
 48:       5201          0          0          0  ARMCTRL-level  50 Edge      DMA IRQ
 62:      60098          0          0          0  ARMCTRL-level  64 Edge      dwc_otg, dwc_otg_pcd, dwc_otg_hcd:usb1
 79:          0          0          0          0  ARMCTRL-level  81 Edge      3f200000.gpio:bank0
 80:          0          0          0          0  ARMCTRL-level  82 Edge      3f200000.gpio:bank1
 86:        231          0          0          0  ARMCTRL-level  88 Edge      mmc0
FIQ:              usb_fiq
IPI0:          0          0          0          0  CPU wakeup interrupts
IPI1:          0          0          0          0  Timer broadcast interrupts
IPI2:       3380       2593       5414       4548  Rescheduling interrupts
IPI3:          4         10         12          8  Function call interrupts
IPI4:          3          6          1          0  Single function call interrupts
IPI5:          0          0          0          0  CPU stop interrupts
IPI6:          1          0          0          0  IRQ work interrupts
IPI7:          0          0          0          0  completion interrupts
Err:          0

$ cat /proc/iomem
00000000-3affffff : System RAM
  00008000-007e624f : Kernel code
  0085e000-0098c1ab : Kernel data
3f006000-3f006fff : dwc_otg
3f007000-3f007eff : /soc/dma@7e007000
3f00b840-3f00b84e : /soc/vchiq
3f00b880-3f00b8bf : /soc/mailbox@7e00b800
3f200000-3f2000b3 : /soc/gpio@7e200000
3f201000-3f201fff : bcm2835-raw-uart
3f202000-3f2020ff : /soc/sdhost@7e202000
3f980000-3f98ffff : dwc_otg

Ich werde wohl mal mit ner frischen SD-Karte von vorne anfangen... Sollte ich eine bestimmte minor version von kernel 4.4 verwenden?

@jens-maus
Copy link

Das kann ich dir nicht sagen. Leider hab ich das Problem (das ich eben auch mit nem RPi3 unter RaspberryMatic habe) noch nicht ganz verstanden und mir fehlt dafür noch das tiefere Verständnis des Kernel modules und wie das genau initialisiert gehört damit auch alle Ressourcen korrekt und automatisch allokiert werden. Momentan setze ich ja z.b. einen festen IRQ von 87 in den kernel module quellen was aber mitunter nicht immer so gegeben sein sollte. Auch musst du beachten das der IRQ nur zugewiesen wird sobald du das erste mal probierst das bcm2835-raw-uart device zu nutzen (z.B: mittels eq3configcmd). Auch deine /proc/iomem ausgabe zeigt z.B. keine "/soc/uart@7e201000" zeile.

@ToSa27
Copy link

ToSa27 commented Dec 26, 2016

Ich hatte zuerst pures HM aufgesetzt mit einem alten commit von occu noch ohne HMip und alles lief (konnte mit RFD über port 2001 kommunizieren, Geräte anlernen etc.).
Dann habe ich die Änderungen für HMip gemacht. Ich werde nochmal neu starten, direkt mit aktuellem occu mit HMip und die Schritte dokumentieren. Wenn's klappt hilft es vielleicht anderen - wenn nicht dann hilft es mir beim debuggen ;)

Hier nochmal vom letzten Versuch:

# eq3configcmd update-coprocessor -p /dev/bcm2835-raw-uart -c -v
2016/12/26 19:04:40.312 <Error> unable to open file /firmware/fwmap
2016/12/26 19:04:40.313 <Error> Error reading firmware map.

# eq3configcmd update-coprocessor -p /dev/bcm2835-raw-uart -c -v -d /opt/homematic/firmware
2016/12/26 19:05:57.992 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 19:05:57.993 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 19:05:59.994 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 19:05:59.994 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 19:06:01.995 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 19:06:01.995 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 19:06:02.994 <Error> CoprocessorUpdate::startApplication():Could not start Coprocessor application.

2016/12/26 19:06:02.994 <Error> Could not start Application, maybe no application on device, do update with dummy Version: 0.0.0

# eq3configcmd update-coprocessor -p /dev/bcm2835-raw-uart -c -v -d /opt/homematic/firmware/HM-MOD-UART
2016/12/26 19:06:18.955 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 19:06:18.956 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 19:06:20.958 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 19:06:20.958 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 19:06:22.959 <Info> CCU2CommControllerMod::sendSystemCommand(): failed
2016/12/26 19:06:22.959 <Error> CCU2CommControllerMod::performIdentify(): Unable to determine coprocessor state.
2016/12/26 19:06:23.958 <Error> CoprocessorUpdate::startApplication():Could not start Coprocessor application.

2016/12/26 19:06:23.958 <Error> Could not start Application, maybe no application on device, do update with dummy Version: 0.0.0

/proc/interrupt und /proc/iomem bleiben auch nach erstmaliger Nutzung unverändert.

@jens-maus
Copy link

Ich denke das neuaufsetzend kannst du dir sparen. Als erste Voraussetzung für einen funktionierenden HmIP Support ist, das das /dev/bcm2835-raw-uart device korrekt funktioniert und die simplen eq3configcmd befehle z.B. zum auslesen der Seriennummer und Firmware version des Funkmoduls korrekt funktionieren. Wenn das nicht der Fall ist brauch man mit rfd/multimacd gar nicht beginnen. Und das /proc/interrupts und /proc/iomem nach dem ersten ansprechen des devices unverändert bleiben zeigt das das kernel Modul nicht richtig mit deinem Kernel zusammenarbeitet. Wie gesagt fehlt da meiner Meinung nach essentielle Sachen bzgl. der Initialisierung des kernel modules und das ist der Grund warum die eq3configcmd befehle schiefgehen.

Die Arbeit wäre also IMHO besser darin investiert das kernel Modul ans laufen zu bekommen, das benötigt allerdings Erfahrung mit linux kernel Modul Entwicklung, die ich selbst auch nur limitiert habe.

@ToSa27
Copy link

ToSa27 commented Dec 26, 2016

Meine Linux Kernel Modul-Entwicklungs Kenntnisse sind auch eher limitiert... ich versuche mich gerade einzulesen und habe zwei interessante Hinweise gefunden (wahrscheinlich sind das nur für mich Neuigkeiten und für euch kalter Kaffee, aber vielleicht hilft es ja):

  1. Quelle: http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_Serial.html Vielleicht hilft das das Unterschiedliche Verhalten von Pi2 und Pi3 zu erklären oder sogar abzustellen...
Änderungen` beim Raspberry Pi Modell 3

Die neue Bluetooth-4.2-Schnittstelle des Modells 3 wird leider über den PL011-UART angebunden. Dieser UART war bei den Vorgängermodellen für die serielle Schnittstelle auf den GPIO-Pins 8 und 10 zuständig. Nun ist der Mini-UART an diesen GPIO-Pins verfügbar. Der Mini-UART ist eine kleine Variante des ursprünglichen UART, die neben einem geringen Durchsatz auch nicht mehr so stabil ist wie zuvor. Die Baud-Rate des Mini-UART wird vom System-Takt (Videocore IV) abgeleitet. Das bedeutet, dass die Baud-Rate nicht mehr stabil bleibt, sondern je nach CPU-Auslastung stark schwankt. Deshalb schlagen die Entwickler vor, den Core-Takt fest auf 250 MHz einzustellen. Alternativ kann, falls nicht benötigt, Bluetooth mittels Devicetree-Overlay abgeschaltet werden. Dazu fügen Sie am Ende der Datei /boot/config.txt die Zeile

dtoverlay=pi3-miniuart-bt
hinzu. Nach einem Neustart funktioniert der UART wieder wie in den Vorgängerversionen.
  1. Quelle https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=148515
    Hier ist beschrieben wie /dev/ttyAMA0 und /dev/ttyS0 von alleine verschwinden ab einem gewissen patch-level und wenn die serielle Konsole deaktiviert ist. Das ist bei mir (aktuelle Jessie Lite version vom 25.11.2016) auch der Fall (ohne neu kompilierten Kernel):
pi@homematic:~ $ ls /dev
autofs           loop3               ram11   tty1   tty30  tty51      vcio
block            loop4               ram12   tty10  tty31  tty52      vc-mem
btrfs-control    loop5               ram13   tty11  tty32  tty53      vcs
bus              loop6               ram14   tty12  tty33  tty54      vcs1
cachefiles       loop7               ram15   tty13  tty34  tty55      vcs2
char             loop-control        ram2    tty14  tty35  tty56      vcs3
console          mapper              ram3    tty15  tty36  tty57      vcs4
cpu_dma_latency  mem                 ram4    tty16  tty37  tty58      vcs5
cuse             memory_bandwidth    ram5    tty17  tty38  tty59      vcs6
disk             mmcblk0             ram6    tty18  tty39  tty6       vcsa
fb0              mmcblk0p1           ram7    tty19  tty4   tty60      vcsa1
fd               mmcblk0p2           ram8    tty2   tty40  tty61      vcsa2
full             mqueue              ram9    tty20  tty41  tty62      vcsa3
fuse             net                 random  tty21  tty42  tty63      vcsa4
gpiomem          network_latency     raw     tty22  tty43  tty7       vcsa5
hwrng            network_throughput  rfkill  tty23  tty44  tty8       vcsa6
initctl          null                shm     tty24  tty45  tty9       vcsm
input            ppp                 snd     tty25  tty46  ttyprintk  vhci
kmsg             ptmx                stderr  tty26  tty47  uhid       watchdog
log              pts                 stdin   tty27  tty48  uinput     watchdog0
loop0            ram0                stdout  tty28  tty49  urandom    xconsole
loop1            ram1                tty     tty29  tty5   vc-cma     zero
loop2            ram10               tty0    tty3   tty50  vchiq

@jens-maus
Copy link

In der Tat sind das nicht ganz neue Informationen für mich. Das man ein dtoverlay bei einem Pi3 braucht um den PL011 wieder für die GPIO pins nutzen zu können ist in der Tat so. Deshalb nutzt RaspberryMatic ja eine entsprechend angepasste config.txt datei. Siehe hier:

https://github.com/jens-maus/RaspberryMatic/blob/master/buildroot-external/board/raspberrypi3/config.txt#L26-L32

Auch das man enable_uart=1 für eine Pi3 braucht habe ich dort in der config.txt datei beachtet. Das hat zumindest dazu geführt das man somit /dev/ttyAMA0 wie bei einem Pi2 nutzen kann und somit das overlay auch seinen dienst korrekt verrichtet. Allerdings Hilfe das anscheinend leider nicht bei dem bcm2835-raw-uart kernel Modul problem, denn dieses geht trotzdem nicht.

@ToSa27
Copy link

ToSa27 commented Dec 27, 2016

Hat der Treiber in der Version von hier https://github.com/eq-3/occu/tree/master/KernelDrivers jemals mit einem 4.1er kernel vernünftig funktioniert? Ich versuche gerade die Details zu verstehen und wenn der 4.1er funktioniert hat könnte ich mich auf die Unterschiede zwischen 4.1 und 4.4 konzentrieren...

Edit: Sorry, meinte natürlich die Triber von https://github.com/eq-3/RaspberryMatic/tree/master/linux-4.1/drivers/char/broadcom.

@jens-maus
Copy link

Nun, das das bcm2835-raw-uart Modul prinzipiell ja funktioniert zeigt ja der RaspberryPi2+HmIP Support in der neuesten RaspberryMatic beta3 version. Ich hab in den Quellen ja auch schon bereits die unterschiede zwischen kernel 4.1 und 4.4. eingearbeitet. Dort wurde im Grunde an ARMctrl gearbeitet und dieses komplett gegen device trees ersetzt. Verstehe ich noch nicht zu 100%, aber die änderungen die ich eingearbeitet habe haben prinzipiell ja dazu geführt das das Modul auf einem Pi2 mit kernel 4.4 funktioniert (zumindest unter dem buildroot system das RaspberryMatic verwendet). Warum du das allerdings nicht unter einem normalen Jessie mit kernel 4.4 hinbekommst kann ich dir auch nicht sagen – das hab ich noch nicht ausprobiert. Es wird aber übrigens auch von Seiten von eQ3 prinzipiell daran gearbeitet das kernel Modul für einen RPi3 hinzubekommen sodass ich zuversichtlich bin hoffentlich in nächster zeit ein kernel Modul zu haben das unter kernel 4.4+Rpi3 auch funktioniert. Ich vermute wie gesagt einfach gewisse Probleme in der Initialisierung (Zuweisung IRQ+IOMEM) des kernel Moduls die sich mit genügend KnowHow wohl recht einfach beseitigen lassen sollten.

@ToSa27
Copy link

ToSa27 commented Dec 29, 2016

Ich sehe schon, ich werde mich erstmal vermehrt mit RaspberryMatic beschäftigen, sonst stelle ich zu viele schon beantwortete Fragen :)
Wenn man sich die Unterschiede im PL011 Treiber zwischen 4.1 und 4.4 ansieht, hat sich einiges geändert, speziell auch in der Device-Initialisierung und der Resourcen-Zuweisung (bcm2835.dtsi / bcm2708_common.dtsi).

@jens-maus
Copy link

Ja, da hat sich einiges geändert. Hilfe von Leuten die etwas mehr Erfahrung bei der Linux-Kernel Entwicklung haben wäre hier wirklich angebracht. die eQ3-Entwickler wollten/wollen hier auch noch in nächster Zeit unter die Arme greifen sodass ich hoffe das wir diese Probleme ggf. bereits noch im Januar in den Griff bekommen und für alle Plattformen ein lauffähiges bcm2835-raw-uart haben.

@ToSa27
Copy link

ToSa27 commented Dec 30, 2016

Ich habe mein Pi2 Problem "gelöst" - oder besser umgangen...
Da ich in Kernel, Modulen etc. keine Unterschiede finden konnte die das Verhalten erklären und ich alle anderen möglichen Störquellen auch soweit wie möglich ausgeschaltet hatte, blieb nur noch der bootloader.
Tatsächlich konnte ich nach Austausch von bootcode.bin / start.elf / fixup.dat durch die entsprechenden Dateien aus der RaspberryMatic Beta3 plötzlich auf das Modul zugreifen. Durch Ausprobieren konnte ich das Problem auf die start.elf einschränken.

@ToSa27
Copy link

ToSa27 commented Dec 30, 2016

Laut buildroot nutzt die 2016.05 Version die in RaspberryMatic verwendet wird die firmware Version vom 6.Mai
Ich suche jetzt also weiter, welche Änderungen zwischen dieser Version und der jetzt aktuellen die vom neuesten Jessie Lite release verwendet wird zu den Problemen führen könnte... allerdings wird das schwierig da der bootloader anscheinend weiterhin closed source ist. Die Beschreibung der Commits mit Auswirkungen auf start.elf sind also der einzige Anhaltspunkt...

Bzgl. Pi3: die Änderungen für "enable_uart" in der config.txt wurden erst danach (am 12.Mai) in den bootloader eingebaut, der bootloader in RaspberryMatic wird also wahrscheinlich noch anders oder überhaupt nicht auf diese Einstellung reagieren...

Edit: der Commit vom 23. August ist für das Problem verantwortlich. Das macht nach der Beschreibung auch Sinn:

firmware: platform: Make the default UART0 clock 48MHz for all Pis
See: raspberrypi/linux#1601
See: #643

@ToSa27
Copy link

ToSa27 commented Dec 30, 2016

Das war tatsächlich das Problem. Eine einfache Änderung der UART0_CLOCK von 3000000 auf 48000000 im Quellcode vom bcm2835_raw_uart führt zum Erfolg mit der aktuellen start.elf bein Pi2:

//      clk = clk_register_fixed_rate(NULL, "uart0_clk", NULL, CLK_IS_ROOT, UART0_CLOCK);
      clk = clk_register_fixed_rate(NULL, "uart0_clk", NULL, CLK_IS_ROOT, 48000000);

Idealerweise sollte man die aktuelle clock-rate auslesen können (aus dem device tree?) statt sie hardcoden zu müssen.

Es gibt ein paar Kommentare dass die clock-rate beim Pi3 schon vor dieser Änderung auf 48000000 hochgesetzt wurde. Falls das so ist, könnte diese Änderung vielleicht auch das Pi3 Problem lösen???

Edit: ich konnte das gerade auf einem Pi3 verifizieren. Das Modul funktioniert nach der Änderung der Frequenz auch mit einem Pi3 und der aktuellen start.elf.

@jens-maus
Copy link

Das sind ja wirklich gute Neuigkeiten und hört sich sehr vielversprechend an das das in der Tat die Lösung des problems ist. Danke für die Analysen, ich werde versuchen das ganze selbst zu testen sobald ich wieder zuhause bin und das mit einem Pi3 live testen kann. Deine Analysen machen aber mehr als sinn und das passt auch zu meiner Vermutung das es im Grunde nur eine Kleinigkeit ist/war die das Modul davon abgehalten hat das es auf einem Pi3 läuft.

@jens-maus
Copy link

Hier nur der kurze Hinweis das ich nun Zeit hatte deine Hinweise bzgl. RaspberryPi3 und bcm2835-raw-uart Modul bzw. 48MHz vs 3MHz für die uart clock Frequenz zu testen. In der Tat hat das nun dazu geführt das das bcm2835-raw-uart Modul nun auch auf einem RaspberryPi3 funktioniert nachdem ich die clock Frequenz im kernel Modul auf 48MHz gestellt habe. Danke dafür! Damit eine RaspberyPi2 Unterscheidung nicht notwendig ist habe ich nun auch kurzerhand in die /boot/config.txt die Zeile init_uart_clock=48000000 aufgenommen damit die uart clock auch auf einem RaspberryPi2 mit 48MHz läuft und das kernel Modul da auch entsprechend funktioniert. Die nächste RaspberryMatic beta version wird dann also mit HmIP Support für RaspberryPi3 auch kommen. Danke nochmal an alle und ich hoffe ihr bekommt den HmIP Support auch für YAHM&Co ans laufen da Konkurrenz ja (wie hier gezeigt) das Geschäft belebt und allgemeine Lösungen unterstützt. :)

@ToSa27
Copy link

ToSa27 commented Jan 2, 2017

Prima.
Ich habe noch die interessante Feststellung gemacht das mit aktuellem Bootloader der Treiber auch funktioniert ohne einen neuen Kernel zu kompilieren. Ich tippe darauf dass der bootloader jetzt tatsächlich das resourcen-assignment nur dann macht wenn ein device tatsächlich verwendet wird. Solange also /dev/ttyAMA0 nicht verwendet wird bevor das bcm2835_raw_uart Modul gestartet wird funktioniert das einwandfrei!

@jens-maus
Copy link

Wunderbar, danke für die Info. Da ich gerade auch ein upgrade auf buildroot 2016.11 mache bin ich gespannt welche Auswirkungen es diesbzgl. dann auch geben wird. Für RaspberryMatic ist das neukompilieren eines Kernels ohnehin aber nicht so kritisch da im build-prozess ohnehin der kernel mit eigener config neu kompiliert wird.

@Chris-42
Copy link

ich hab bei mir yahm mit HmIP auf jessie-light zum Laufen gebracht. Ich denke mal die wichtigsten Punkte ware das durchreichen der Devices in den Kontainer und das Upgrade des Moduls.
Meine Vorgehensweise:
Module laden:
/opt/YAHM/share/tools/rpi-source/rpi-source
mkdir mymods
cd mymods
wget https://github.com/jens-maus/RaspberryMatic/raw/master/buildroot-external/package/homematic/kernel-modules/bcm2835_raw_uart/bcm2835_raw_uart.c
wget https://github.com/jens-maus/RaspberryMatic/raw/master/buildroot-external/package/homematic/kernel-modules/eq3_char_loop/eq3_char_loop.c
Makefile anlegen (Format stimmt nicht ganz wegen des Editors):
MODSRC=/root/mymods

obj-m += bcm2835_raw_uart.o
obj-m += eq3_char_loop.o

all:
make -C /lib/modules/$(shell uname -r)/build M=${MODSRC} modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=${MODSRC} clean
Module bauen und installieren:
make
cp eq3_char_loop.ko /lib/modules/$(uname -r)/kernel/drivers/char/
cp bcm2835_raw_uart.ko /lib/modules/$(uname -r)/kernel/drivers/char/broadcom
depmod -a
insmod eq3_char_loop.ko
insmod bcm2835_raw_uart.ko
in z.B. /etc/init.d/hm-mod-rpi-pcb die Module beim Start laden
jetzt noch die Devices in den Kontainer:
lxc-device -n yahm add /dev/bcm2835-raw-uart
lxc-device -n yahm add /dev/eq3loop
in yahm in /etc/config/multimacd.conf das richtige device eintragen:
Coprocessor Device Path = /dev/bcm2835-raw-uart
reboot
im host system und im yahm das device /dev/ttyS0 entfernen
jetzt im yahm den multimacd starten. Es werden die devices mmd_bidcos und ttyS0 (243,[12]) angelegt. Diese auch in den Kontainer linken:
lxc-device -n yahm add /dev/mmd_bidcos
lxc-device -n yahm add /dev/ttyS0
wenn der multimacd sich beendet ist sicher noch die V1.4.1 auf dem Modul. Dann dieses auf 2.2.1 im yahm upgraden:
mkdir /firmware/HM-MOD-UART
cd /firmware/HM-MOD-UART
wget --no-check-certificate https://github.com/eq-3/occu/raw/master/firmware/HM-MOD-UART/dualcopro_si1002_update_blhm.eq3
wget --no-check-certificate https://github.com/eq-3/occu/raw/master/firmware/HM-MOD-UART/fwmap
in fwmap die 2.2.1 enablen und dann das upgrade durchführen:
eq3configcmd update-coprocessor -p /dev/bcm2835-raw-uart -t HM-MOD-UART -u -c -d /firmware/HM-MOD-UART
in der Interfaces.xml muss natürlich das HmIP drin sein.

Gruß
Christian

@leonsio
Copy link

leonsio commented Jan 22, 2017 via email

@mahrens61
Copy link

Bei mir hat all dies nicht geholfen. Ich bekomme immer noch "BidCos-RF Anlernmodus konnte nicht aktiviert werden."

Auszug aus dem logfile
Feb 9 22:18:50 homematic-ccu2 user.info logger: Updating RF Lan Gateway Coprocessor Firmware
Feb 9 22:18:50 homematic-ccu2 user.debug update-coprocessor: firmware filename is: coprocessor_update_hm_only.eq3
Feb 9 22:18:50 homematic-ccu2 user.info logger: Updating RF Lan Gateway Firmware
Feb 9 22:18:50 homematic-ccu2 user.info update-lgw-firmware: No gateway found in config file /etc/config/rfd.conf
Feb 9 22:18:50 homematic-ccu2 user.info logger: Updating Wired Lan Gateway Firmware
Feb 9 22:18:50 homematic-ccu2 user.info update-lgw-firmware: No gateway found in config file /etc/config/hs485d.conf
Feb 9 22:18:50 homematic-ccu2 daemon.info ifplugd(eth0)[150]: Program executed successfully.
Feb 9 23:18:52 homematic-ccu2 user.info kernel: [ 20.973322] yahmbr0: port 1(eth0) entered forwarding state
Feb 9 23:19:01 homematic-ccu2 user.info kernel: [ 23.703662] eq3loop: created slave mmd_bidcos
Feb 9 23:19:03 homematic-ccu2 user.err multimac: HomeMatic Coprocessor detected!!! Please install DualCoPro Firmware
Feb 9 23:19:04 homematic-ccu2 user.err rfd: No BidCoS-Interface available

@Xento
Copy link

Xento commented Feb 25, 2017

Also bei mir scheint es funktioniert zu haben.
Die Devices sind da und der multimacd läuft.
Hab leider keine IP Geräte um diese zu testen.

Wann könnte man mit einer Fertigstellung des Homematic-IP Moduls für YAHM rechnen @leonsio

@leonsio
Copy link

leonsio commented Feb 25, 2017 via email

@leonsio
Copy link

leonsio commented Feb 27, 2017

habe gerade den test mit 4.9.x branch gemacht und da scheint es nicht mehr zu gehen

make -C /lib/modules/4.9.13-v7+/build M=/tmp/kernel-modules/bcm2835_raw_uart modules
make[1]: Entering directory '/root/linux-883de20e54e16f89a878c9957fd265e352ebf5c3'
  CC [M]  /tmp/kernel-modules/bcm2835_raw_uart/bcm2835_raw_uart.o
/tmp/kernel-modules/bcm2835_raw_uart/bcm2835_raw_uart.c:55:60: fatal error: ../arch/arm/mach-bcm2709/include/mach/platform.h: Datei oder Verzeichnis nicht gefunden
 #include <../arch/arm/mach-bcm2709/include/mach/platform.h>
                                                            ^
compilation terminated.
scripts/Makefile.build:299: recipe for target '/tmp/kernel-modules/bcm2835_raw_uart/bcm2835_raw_uart.o' failed
make[2]: *** [/tmp/kernel-modules/bcm2835_raw_uart/bcm2835_raw_uart.o] Error 1
Makefile:1490: recipe for target '_module_/tmp/kernel-modules/bcm2835_raw_uart' failed
make[1]: *** [_module_/tmp/kernel-modules/bcm2835_raw_uart] Error 2
make[1]: Leaving directory '/root/linux-883de20e54e16f89a878c9957fd265e352ebf5c3'
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 2

kann jetzt nicht beurteilen, ob es an den source liegt dass die Platform.h fehlt, oder der Tree generell angepasst wurde

@jens-maus
Copy link

@leonsio Das ist mitunter der Grund wieso RaspberryMatic selbst noch bei Kernel 4.4 ist. Ich denke es führt über kurz/lang kein Weg dran vorbei die Ressourcen-abhängigen Dinge in dem bcm-Kernel modul in ein DeviceTree Overlay zu verwandeln (siehe jens-maus/RaspberryMatic#38)

@leonsio
Copy link

leonsio commented Feb 27, 2017

mit paar kleinen Hacks habe ich das Modul unter 4.9 kompiliert

  1. ich habe die platform.h aus dem 4.4er Kernel genommen
  2. musste ich CLK_IS_ROOT Variable durch 0 ersetzen

das Kompilieren ist erfolgreich verlaufen und das Device erscheint unter /dev

mal sehen ob alles auch weiterhin funktioniert ;)

@drose28357
Copy link

Only a hint, maybe usefull for further investigations on bmc2835...

Kody on Raspberry Pi3 uses Kernel 4.10.9 (12th of april 2017) including on board wifi on a pi3.

http://forum.kodi.tv/showthread.php?tid=298461

I dont know if they use a different driver setup becaus they have a different bootloader ?

@leonsio
Copy link

leonsio commented Apr 21, 2017

wollte nur berichten, dass ich es auch unter YAHM zum laufen gebraucht habe, mit 4.4 und 4.9er Kernel.
wird mit YAHM 1.7 freigegeben

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants