Armadilloフォーラム

imx21-uart.1: Rx FIFO overrun

tamuki

2025年7月16日 17時15分

タヌキです。

以下についてご教授ください。

armadillo-420を使用しております。
開発環境、Linuxカーネル環境は以下の通りです。

・S/N:097438
・開発環境:atde5-amd64-20191016.tar.gz
・Atmark-Dist:atmark-dist-20191216.tar.gz
・Linuxカーネル:linux-3.14-at13.tar.gz

armadillo-420上で動作する以下プログラムを作成しています。
①CAN通信:相手機器から40msでステータス(8byte/回)を受信する。
 ※CAN通信には別売りのATB-A400CANを使用しております。
②RS-232C通信:相手機器から40msでステータス(44byte/回)を受信する。

①、②をそれぞれ単独で動作する事を確認しております。
しかし、①の後に②の機器を接続すると、①のCAN通信が止まってしまいます。

/var/log/messegesを見ると以下のログが大量に記録されていました。
>(none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun

原因としてはバッファーがオーバーフローしたものと推測しています。
そこで、バッファーサイズを増やそうと考えましたが、以下マニュアルの9.3.3UARTに記載の「関連するソースコード」の、どのファイルを修正して良いのかわかりません。何を修正すべきでしょうか?
 「Armadillo-400シリーズ
  ソフトウェアマニュアル
  Version2.2.2、2022/09/28」

または、DMAを有効にする方法を教えて頂きたいです。

よろしくお願いします。

コメント

溝渕です。

> /var/log/messegesを見ると以下のログが大量に記録されていました。
> >(none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun
>
> 原因としてはバッファーがオーバーフローしたものと推測しています。

いえ。オーバーフローしたのは、SoC(i.MX257)のUARTコアのFIFOです。(アプリケーションやLinuxカーネルで実装可能な)ソフトウェアバッファーではありません。

> そこで、バッファーサイズを増やそうと考えましたが、以下マニュアルの9.3.3UARTに記載の「関連するソースコード」の、どのファイルを修正して良いのかわかりません。何を修正すべきでしょうか?

SoCのFIFOサイズは固定です。その為増やす事はできません。

> または、DMAを有効にする方法を教えて頂きたいです。

linux-3.14-at時点では、i.MX257のUARTでDMAは無効になっています。現在では以下が適用されており、

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/comm…

i.MXシリーズは全てDMAが有効になっています。上記パッチだけで利用可能になるか不明ですが、試してみる価値はあるかと思います。

溝渕様

返信ありがとうございます。
教えて頂いたURLからimx.cを修正しました。(IMX53_UART→IMX25_UARTに置き換え)
また、Kernel ConfigのDevice Drivers--->DMA Engine suport--->i.MX SDMA supportをENABLEにしました。
その他にデバイスツリーの編集が必要との認識ですが、~/arch/arm/boot/dts/imx25.dtsiで良いのでしょうか?
ご教授願います。

また、基本的な事をお聞きして申し訳ありませんが、
CON3でRS232Cケーブルを接続しシリアル通信をし、CAN通信をするために以前本HPに案内のあった「ATB-M2M CAN 対応ボード」をCON14に接続して使用しています。
CAN通信をしている際に、RS232Cケーブルを途中から接続しシリアル通信を開始すると必ずCAN通信が停止しシリアル通信は継続します。
kernel Config等で必要な設定はあるのでしょうか?
よろしくお願いします。

溝渕です。

> その他にデバイスツリーの編集が必要との認識ですが、~/arch/arm/boot/dts/imx25.dtsiで良いのでしょうか?

いえ、デバイスツリーは利用していません。

Armadillo-400シリーズは(ATAGを利用した起動の仕組みで利用する)platform_deviceでハードウェア構成情報を定義します。

該当ファイルは次の通りです。

https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_sof…

> CON3でRS232Cケーブルを接続しシリアル通信をし、CAN通信をするために以前本HPに案内のあった「ATB-M2M CAN 対応ボード」をCON14に接続して使用しています。
> CAN通信をしている際に、RS232Cケーブルを途中から接続しシリアル通信を開始すると必ずCAN通信が停止しシリアル通信は継続します。
> kernel Config等で必要な設定はあるのでしょうか?

いえ、その認識はありません。

というのも、UARTとCANはIP coreもdevice driverも異なり、競合しないとの認識である為です。

通信停止時にLinux kernelのメッセージが表示されていたりしませんか?

溝渕様

返信ありがとうございます。

> 通信停止時にLinux kernelのメッセージが表示されていたりしませんか?
>>
表示はされていませんでした。

現状は以下の通りとなっています。
Armadillo-420上で動作させている自作アプリを起動せずに、シリアル通信機器※からRS232CケーブルをArmadillo-420に接続したところ、/var/log/messagesに以下の記録が大量にされていました。
>Jul 31 23:24:41 (none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun
>Jul 31 23:24:41 (none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun
>Jul 31 23:24:41 (none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun

※シリアルデータを40ms周期で44byte(ポートレート:115200bps)送信する。

また、CAN通信中にRS232Cケーブルを接続するとCAN通信停止しますが、以下のコマンドをCAN通信機器に送信したところデータ受信出来ませんでした。(通常、CAN通信機器から40ms周期で8byte、Armadillo-420はデータ受信する。)
>candump can0

溝渕様

/var/log/messagesに記録されていた以下のメッセージですが、自作プログラム(シリアルの設定をしている、ボーレート等)を起動すると記録されない事を確認しました。
>Jul 31 23:24:41 (none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun

個々の通信は出来ておりますが、両方のケーブルを接続するとシリアル通信データのみ受信します。
・シリアル通信(RS232C)
・CAN通信

やはり、Kernelの設定で問題があるように思われます。

参考になるかわかりませんが、Armadill-420起動からCAN通信確立までの/var/log/messages内容を以下に示します。

08:33:06 (none) syslog.info syslogd started: BusyBox v1.20.2
08:33:06 (none) user.notice kernel: klogd started: BusyBox v1.20.2 (2024-09-26 16:52:15 JST)
08:33:06 (none) user.info kernel: Booting Linux on physical CPU 0x0
08:33:06 (none) user.info kernel: Initializing cgroup subsys cpuset
08:33:06 (none) user.info kernel: Initializing cgroup subsys cpu
08:33:06 (none) user.info kernel: Initializing cgroup subsys cpuacct
08:33:06 (none) user.notice kernel: Linux version 3.14.36-at13 (atmark@atde5) (gcc version 4.6.3 (Debian 4.6.3-14atmark1) ) #7 PREEMPT Tue Jul 22 11:16:45 JST 2025
08:33:06 (none) user.info kernel: CPU: ARM926EJ-S [41069264] revision 4 (ARMv5TEJ), cr=00053177
08:33:06 (none) user.info kernel: CPU: VIVT data cache, VIVT instruction cache
08:33:06 (none) user.warn kernel: Machine: Armadillo-420
08:33:06 (none) user.info kernel: Memory policy: Data cache writeback
08:33:06 (none) user.debug kernel: On node 0 totalpages: 16384
08:33:06 (none) user.debug kernel: free_area_init_node: node 0, pgdat c065c9a0, node_mem_map c3f7b000
08:33:06 (none) user.debug kernel: Normal zone: 128 pages used for memmap
08:33:06 (none) user.debug kernel: Normal zone: 0 pages reserved
08:33:06 (none) user.debug kernel: Normal zone: 16384 pages, LIFO batch:3
08:33:06 (none) user.debug kernel: pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
08:33:06 (none) user.debug kernel: pcpu-alloc: [0] 0
08:33:06 (none) user.warn kernel: Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
08:33:06 (none) user.notice kernel: Kernel command line: console=ttymxc1,115200 root=/dev/ram0
08:33:06 (none) user.info kernel: PID hash table entries: 256 (order: -2, 1024 bytes)
08:33:06 (none) user.info kernel: Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
08:33:06 (none) user.info kernel: Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
08:33:06 (none) user.info kernel: allocated 131072 bytes of page_cgroup
08:33:06 (none) user.info kernel: please try 'cgroup_disable=memory' option if you don't want memory cgroups
08:33:06 (none) user.warn kernel: Memory: 36100K/65536K available (4646K kernel code, 228K rwdata, 1424K rodata, 176K init, 158K bss, 29436K reserved)
08:33:06 (none) user.notice kernel: Virtual kernel memory layout:
08:33:06 (none) user.notice kernel: vector : 0xffff0000 - 0xffff1000 ( 4 kB)
08:33:06 (none) user.notice kernel: fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
08:33:06 (none) user.notice kernel: vmalloc : 0xc4800000 - 0xff000000 ( 936 MB)
08:33:06 (none) user.notice kernel: lowmem : 0xc0000000 - 0xc4000000 ( 64 MB)
08:33:06 (none) user.notice kernel: modules : 0xbf000000 - 0xc0000000 ( 16 MB)
08:33:06 (none) user.notice kernel: .text : 0xc0008000 - 0xc05f5ebc (6072 kB)
08:33:06 (none) user.notice kernel: .init : 0xc05f6000 - 0xc0622354 ( 177 kB)
08:33:06 (none) user.notice kernel: .data : 0xc0624000 - 0xc065d140 ( 229 kB)
08:33:06 (none) user.notice kernel: .bss : 0xc065d14c - 0xc0684d10 ( 159 kB)
08:33:06 (none) user.info kernel: Preemptible hierarchical RCU implementation.
08:33:06 (none) user.info kernel: Dump stacks of tasks blocking RCU-preempt GP.
08:33:06 (none) user.info kernel: NR_IRQS:16 nr_irqs:16 16
08:33:06 (none) user.info kernel: MXC IRQ initialized
08:33:06 (none) user.info kernel: Switching to timer-based delay loop
08:33:06 (none) user.info kernel: sched_clock: 32 bits at 66MHz, resolution 15ns, wraps every 64585974768ns
08:33:06 (none) user.info kernel: Console: colour dummy device 80x30
08:33:06 (none) user.info kernel: Calibrating delay loop (skipped), value calculated using timer frequency.. 133.00 BogoMIPS (lpj=665000)
08:33:06 (none) user.info kernel: pid_max: default: 32768 minimum: 301
08:33:06 (none) user.info kernel: Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
08:33:07 (none) user.info kernel: Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
08:33:07 (none) user.info kernel: Initializing cgroup subsys memory
08:33:07 (none) user.info kernel: Initializing cgroup subsys devices
08:33:07 (none) user.info kernel: Initializing cgroup subsys freezer
08:33:07 (none) user.info kernel: Initializing cgroup subsys blkio
08:33:07 (none) user.info kernel: CPU: Testing write buffer coherency: ok
08:33:07 (none) user.info kernel: Setting up static identity map for 0x804903e8 - 0x80490440
08:33:07 (none) user.info kernel: devtmpfs: initialized
08:33:07 (none) user.info kernel: pinctrl core: initialized pinctrl subsystem
08:33:07 (none) user.info kernel: regulator-dummy: no parameters
08:33:07 (none) user.info kernel: NET: Registered protocol family 16
08:33:07 (none) user.info kernel: DMA: preallocated 256 KiB pool for atomic coherent allocations
08:33:07 (none) user.info kernel: imx25-pinctrl imx25-pinctrl.0: initialized IMX pinctrl driver
08:33:07 (none) user.info kernel: bio: create slab at 0
08:33:07 (none) user.info kernel: eSDHC1 Vcc: at 3300 mV
08:33:07 (none) user.info kernel: USB VBUS: at 5000 mV
08:33:07 (none) user.info kernel: fixed-dummy: no parameters
08:33:07 (none) user.notice kernel: SCSI subsystem initialized
08:33:07 (none) user.info kernel: usbcore: registered new interface driver usbfs
08:33:07 (none) user.info kernel: usbcore: registered new interface driver hub
08:33:07 (none) user.info kernel: usbcore: registered new device driver usb
08:33:07 (none) user.info kernel: i2c i2c-0: IMX I2C adapter registered
08:33:07 (none) user.info kernel: i2c i2c-1: IMX I2C adapter registered
08:33:07 (none) user.info kernel: Linux video capture interface: v2.00
08:33:07 (none) user.info kernel: pps_core: LinuxPPS API ver. 1 registered
08:33:07 (none) user.info kernel: pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti
08:33:07 (none) user.info kernel: PTP clock support registered
08:33:07 (none) user.info kernel: Advanced Linux Sound Architecture Driver Initialized.
08:33:07 (none) user.info kernel: Switched to clocksource mxc_timer1
08:33:07 (none) user.info kernel: NET: Registered protocol family 2
08:33:07 (none) user.info kernel: TCP established hash table entries: 1024 (order: 0, 4096 bytes)
08:33:07 (none) user.info kernel: TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
08:33:07 (none) user.info kernel: TCP: Hash tables configured (established 1024 bind 1024)
08:33:07 (none) user.info kernel: TCP: reno registered
08:33:07 (none) user.info kernel: UDP hash table entries: 256 (order: 0, 4096 bytes)
08:33:07 (none) user.info kernel: UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
08:33:07 (none) user.info kernel: NET: Registered protocol family 1
08:33:07 (none) user.info kernel: Trying to unpack rootfs image as initramfs...
08:33:07 (none) user.info kernel: rootfs image is not initramfs (junk in compressed archive); looks like an initrd
08:33:07 (none) user.info kernel: Freeing initrd memory: 22028K (c1000000 - c2583000)
08:33:07 (none) user.info kernel: futex hash table entries: 256 (order: -1, 3072 bytes)
08:33:07 (none) user.info kernel: audit: initializing netlink subsys (disabled)
08:33:07 (none) user.notice kernel: audit: type=2000 audit(0.799:1): initialized
08:33:07 (none) user.notice kernel: VFS: Disk quotas dquot_6.5.2
08:33:07 (none) user.warn kernel: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
08:33:07 (none) user.info kernel: msgmni has been set to 113
08:33:07 (none) user.info kernel: Block layer SCSI generic (bsg) driver version 0.4 loaded (major 249)
08:33:07 (none) user.info kernel: io scheduler noop registered
08:33:07 (none) user.info kernel: io scheduler deadline registered
08:33:07 (none) user.info kernel: io scheduler cfq registered (default)
08:33:07 (none) user.info kernel: imx-sdma imx25-sdma: loaded firmware 1.0
08:33:07 (none) user.info kernel: imx-sdma imx25-sdma: initialized
08:33:07 (none) user.info kernel: imx21-uart.1: ttymxc1 at MMIO 0x43f94000 (irq = 48, base_baud = 7500000) is a IMX
08:33:07 (none) user.info kernel: console [ttymxc1] enabled
08:33:07 (none) user.info kernel: imx21-uart.2: ttymxc2 at MMIO 0x5000c000 (irq = 34, base_baud = 7500000) is a IMX
08:33:07 (none) user.info kernel: imx21-uart.4: ttymxc4 at MMIO 0x5002c000 (irq = 56, base_baud = 7500000) is a IMX
08:33:07 (none) user.info kernel: brd: module loaded
08:33:07 (none) user.info kernel: loop: module loaded
08:33:07 (none) user.notice kernel: physmap platform flash device: 02000000 at a0000000
08:33:07 (none) user.info kernel: physmap-flash: Found 1 x16 devices at 0x0 in 16-bit bank. Manufacturer ID 0x000089 Chip ID 0x00881b
08:33:07 (none) user.debug kernel: physmap-flash: Found an alias at 0x1000000 for the chip at 0x0
08:33:07 (none) user.info kernel: Intel/Sharp Extended Query Table at 0x010A
08:33:07 (none) user.info kernel: Intel/Sharp Extended Query Table at 0x010A
08:33:07 (none) user.info kernel: Intel/Sharp Extended Query Table at 0x010A
08:33:07 (none) user.info kernel: Intel/Sharp Extended Query Table at 0x010A
08:33:07 (none) user.info kernel: Intel/Sharp Extended Query Table at 0x010A
08:33:07 (none) user.info kernel: Using buffer write method
08:33:07 (none) user.info kernel: Using auto-unlock on power-up/resume
08:33:07 (none) user.notice kernel: cfi_cmdset_0001: Erase suspend on write enabled
08:33:07 (none) user.debug kernel: erase region 0: offset=0x0,size=0x8000,blocks=4
08:33:07 (none) user.debug kernel: erase region 1: offset=0x20000,size=0x20000,blocks=127
08:33:07 (none) user.notice kernel: Creating 4 MTD partitions on "physmap-flash":
08:33:07 (none) user.notice kernel: 0x000000000000-0x000000020000 : "nor.bootloader"
08:33:07 (none) user.notice kernel: 0x000000020000-0x000000420000 : "nor.kernel"
08:33:07 (none) user.notice kernel: 0x000000420000-0x000000f00000 : "nor.userland"
08:33:07 (none) user.notice kernel: 0x000000f00000-0x000001000000 : "nor.config"
08:33:07 (none) user.info kernel: CAN device driver interface
08:33:07 (none) user.info kernel: flexcan flexcan.1: device registered (reg_base=c4888000, irq=60)
08:33:07 (none) user.info kernel: libphy: fec_enet_mii_bus: probed
08:33:07 (none) user.info kernel: fec imx25-fec.0 eth0: Freescale FEC PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=imx25-fec-1:00, irq=-1)
08:33:07 (none) user.info kernel: PPP generic driver version 2.4.2
08:33:07 (none) user.info kernel: ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
08:33:07 (none) user.info kernel: usbcore: registered new interface driver usb-storage
08:33:07 (none) user.info kernel: ci_hdrc ci_hdrc.0: EHCI Host Controller
08:33:07 (none) user.info kernel: ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
08:33:07 (none) user.info kernel: ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
08:33:07 (none) user.info kernel: hub 1-0:1.0: USB hub found
08:33:07 (none) user.info kernel: hub 1-0:1.0: 1 port detected
08:33:07 (none) user.info kernel: ci_hdrc ci_hdrc.1: EHCI Host Controller
08:33:07 (none) user.info kernel: ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 2
08:33:07 (none) user.info kernel: ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
08:33:07 (none) user.info kernel: hub 2-0:1.0: USB hub found
08:33:07 (none) user.info kernel: hub 2-0:1.0: 1 port detected
08:33:07 (none) user.info kernel: i2c /dev entries driver
08:33:07 (none) user.info kernel: uvcvideo: Unable to create debugfs directory
08:33:07 (none) user.info kernel: usbcore: registered new interface driver uvcvideo
08:33:07 (none) user.info kernel: USB Video Class driver (1.1.1)
08:33:07 (none) user.info kernel: imx2-wdt imx2-wdt.0: timeout 10 sec (nowayout=0)
08:33:07 (none) user.info kernel: sdhci: Secure Digital Host Controller Interface driver
08:33:07 (none) user.info kernel: sdhci: Copyright(c) Pierre Ossman
08:33:07 (none) user.info kernel: sdhci-pltfm: SDHCI platform and OF driver helper
08:33:07 (none) user.info kernel: mmc0: no vqmmc regulator found
08:33:07 (none) user.info kernel: mmc0: SDHCI controller on sdhci-esdhc-imx25.0 [sdhci-esdhc-imx25.0] using DMA
08:33:07 (none) user.info kernel: usbcore: registered new interface driver usbhid
08:33:07 (none) user.info kernel: usbhid: USB HID core driver
08:33:07 (none) user.info kernel: usbcore: registered new interface driver snd-usb-audio
08:33:07 (none) user.info kernel: usbcore: registered new interface driver snd-usb-caiaq
08:33:07 (none) user.info kernel: oprofile: no performance counters
08:33:07 (none) user.info kernel: oprofile: using timer interrupt.
08:33:07 (none) user.info kernel: nf_conntrack version 0.5.0 (908 buckets, 3632 max)
08:33:07 (none) user.info kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
08:33:07 (none) user.info kernel: TCP: cubic registered
08:33:07 (none) user.info kernel: NET: Registered protocol family 10
08:33:07 (none) user.info kernel: ip6_tables: (C) 2000-2006 Netfilter Core Team
08:33:07 (none) user.info kernel: sit: IPv6 over IPv4 tunneling driver
08:33:07 (none) user.info kernel: NET: Registered protocol family 17
08:33:07 (none) user.info kernel: NET: Registered protocol family 15
08:33:07 (none) user.info kernel: can: controller area network core (rev 20120528 abi 9)
08:33:07 (none) user.info kernel: NET: Registered protocol family 29
08:33:07 (none) user.info kernel: can: raw protocol (rev 20120528)
08:33:07 (none) user.info kernel: can: broadcast manager protocol (rev 20120528 t)
08:33:07 (none) user.info kernel: can: netlink gateway (rev 20130117) max_hops=1
08:33:07 (none) user.info kernel: registered taskstats version 1
08:33:07 (none) user.warn kernel: eSDHC1 Vcc: incomplete constraints, leaving on
08:33:07 (none) user.warn kernel: regulator-dummy: incomplete constraints, leaving on
08:33:07 (none) user.info kernel: input: gpio-keys as /devices/platform/gpio-keys/input/input0
08:33:07 (none) user.err kernel: drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
08:33:07 (none) user.info kernel: ALSA device list:
08:33:07 (none) user.info kernel: No soundcards found.
08:33:07 (none) user.notice kernel: RAMDISK: ext2 filesystem found at block 0
08:33:07 (none) user.notice kernel: RAMDISK: Loading 22029KiB [1 disk] into ram disk... |^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\^H|^H/^H-^H\
08:33:07 (none) user.info kernel: VFS: Mounted root (ext2 filesystem) on device 1:0.
08:33:07 (none) user.info kernel: devtmpfs: mounted
08:33:07 (none) user.info kernel: Freeing unused kernel memory: 176K (c05f6000 - c0622000)
08:33:07 (none) user.err kernel: 0>udevd[1168]: starting version 175
08:33:10 (none) user.info kernel: IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
08:33:10 (none) daemon.err lighttpd[1461]: (../../src/log.c.75) server started
08:33:11 (none) user.notice kernel: random: avahi-daemon urandom read with 70 bits of entropy available
08:33:11 (none) daemon.info avahi-daemon[1486]: Found user 'avahi' (UID 650) and group 'avahi' (GID 650).
08:33:11 (none) daemon.info avahi-daemon[1486]: Successfully dropped root privileges.
08:33:11 (none) daemon.info avahi-daemon[1486]: avahi-daemon 0.6.9 starting up.
08:33:11 (none) daemon.info avahi-daemon[1486]: Successfully called chroot().
08:33:11 (none) daemon.info avahi-daemon[1486]: Successfully dropped remaining capabilities.
08:33:11 (none) daemon.info avahi-daemon[1486]: Loading service file /services/at-admin.service.
08:33:11 (none) daemon.info avahi-daemon[1486]: Loading service file /services/camera.service.
08:33:11 (none) daemon.info avahi-daemon[1486]: Loading service file /services/http.service.
08:33:11 (none) daemon.info avahi-daemon[1486]: New relevant interface eth0.IPv4 for mDNS.
08:33:11 (none) daemon.info avahi-daemon[1486]: Joining mDNS multicast group on interface eth0.IPv4 with address 192.168.0.2.
08:33:11 (none) daemon.info avahi-daemon[1486]: Network interface enumeration completed.
08:33:11 (none) daemon.info avahi-daemon[1486]: Registering new address record for 192.168.0.2 on eth0.
08:33:11 (none) daemon.info avahi-daemon[1486]: Registering HINFO record with values 'ARMV5TEJL'/'LINUX'.
08:33:11 (none) user.info kernel: libphy: imx25-fec-1:00 - Link is Up - 100/Full
08:33:11 (none) user.info kernel: IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
08:33:12 (none) daemon.info avahi-daemon[1486]: Server startup complete. Host name is armadillo420-0.local. Local service cookie is 623763655.
08:33:13 (none) daemon.info avahi-daemon[1486]: Service "http on armadillo420-0 [00:11:0C:12:74:CD]" (/services/http.service) successfully established.
08:33:13 (none) daemon.info avahi-daemon[1486]: Service "Camera on armadillo420-0 [00:11:0C:12:74:CD]" (/services/camera.service) successfully established.
08:33:13 (none) daemon.info avahi-daemon[1486]: Service "AT Admin on armadillo420-0 [00:11:0C:12:74:CD]" (/services/at-admin.service) successfully established.
08:33:13 (none) daemon.info avahi-daemon[1486]: New relevant interface eth0.IPv6 for mDNS.
08:33:13 (none) daemon.info avahi-daemon[1486]: Joining mDNS multicast group on interface eth0.IPv6 with address fe80::211:cff:fe12:74cd.
08:33:13 (none) daemon.info avahi-daemon[1486]: Registering new address record for fe80::211:cff:fe12:74cd on eth0.
08:33:31 (none) user.notice kernel: random: nonblocking pool is initialized
17:33:45 (none) auth.notice su: + /dev/pts/0 guest:root
17:36:41 (none) auth.notice su: + /dev/pts/1 guest:root
08:37:01 (none) ftp.info ftpd[1553]: connection from 192.168.0.5
08:37:02 (none) ftp.info ftpd[1554]: connection from 192.168.0.5
08:37:02 (none) ftp.info ftpd[1554]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:37:13 (none) ftp.info ftpd[1556]: connection from 192.168.0.5
08:37:15 (none) ftp.info ftpd[1557]: connection from 192.168.0.5
08:37:15 (none) ftp.info ftpd[1557]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:37:17 (none) ftp.info ftpd[1558]: connection from 192.168.0.5
08:37:18 (none) ftp.info ftpd[1559]: connection from 192.168.0.5
08:37:18 (none) ftp.info ftpd[1559]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:37:18 (none) ftp.info ftpd[1560]: connection from 192.168.0.5
08:37:18 (none) ftp.info ftpd[1560]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:37:21 (none) ftp.info ftpd[1562]: connection from 192.168.0.5
08:37:21 (none) ftp.info ftpd[1562]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:37:31 (none) ftp.info ftpd[1563]: connection from 192.168.0.5
08:37:31 (none) ftp.info ftpd[1563]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:37:34 (none) ftp.info ftpd[1564]: connection from 192.168.0.5
08:37:34 (none) ftp.info ftpd[1564]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:37:52 (none) ftp.info ftpd[1567]: connection from 192.168.0.5
08:37:52 (none) ftp.info ftpd[1567]: ANONYMOUS FTP LOGIN FROM 192.168.0.5
08:38:07 (none) user.warn kernel: flexcan flexcan.1 can0: bitrate error 0.7%
08:38:07 (none) user.info kernel: flexcan flexcan.1 can0: writing ctrl=0x051a2002

溝渕です。

溝渕です。

問題が再現できる最小のプログラムをご提供いただく事は可能ですか? こちらで再現できると、何かアドバイスができるかもしれません。

再現できる事が重要ですので、対向機器についてもPCやArmadilloである事が望ましいです。

溝渕様

返信頂きありがとうございます。

以下構成で単純なサンプルプログラムを作成してみました。
動作させた結果、RS232C通信、CAN通信データを②のサンプルプログラムで受信する事を確認しました。そのためArmadillo-420のKernel等の設定に問題はないと判断しました。
そして、③以外をこちらが製作しているアプリケーションに置き換えて動作させても問題なく通信出来る事を確認しました。(CAN通信箇所のみ③とI/Fするように修正)
この結果から、問題がありそうなのはCAN通信機器のNOVA(ESI MOTION製)とのI/Fではないのかと推測しました。

①RS232C通信模擬:
 ・44byte/40msで②にデータを送信する
 ・C#言語、program.cs
②本体模擬:
 ・RS232C通信、CAN通信模擬からデータを受信する
 ・C言語、can_serial_test_1.c
③CAN通信模擬:
 ・8byte/40msで②にデータを送信する
 ・C言語、can_sim_1.c

①ノートPC(WIN10)-(RS232C通信)-②Armadillo-420(ATB-M2M CAN 対応ボード)-(CAN通信)-③Armadillo-420(ATB-M2M CAN 対応ボード)

ファイル ファイルの説明
can_serial_test_1.c
Program.cs_.txt _.txtを削除ください。
can_sim_1.c

溝渕です。

すみません。私に読解力が乏しく状況を把握できていないので、まず確認させてください。

> ①ノートPC(WIN10)-(RS232C通信)-②Armadillo-420(ATB-M2M CAN 対応ボード)-(CAN通信)-③Armadillo-420(ATB-M2M CAN 対応ボード)

上記構成で、各番号に該当するプログラムを動作させると、不具合が再現できるという認識で良いでしょうか?

上記認識が正しい場合、
- どのような手順を行い、
- どのような挙動を期待し、
- どのような実行結果になったか
を教えてください。

溝渕様

文章が紛らわしく、またわかりずらくすみませんでした。
下記構成で最小限のサンプルプログラム①~③を動作させた結果、問題なく両通信(RS232C、CAN)を受信する事が出来ました。

> ①ノートPC(WIN10)-(RS232C通信)-②Armadillo-420(ATB-M2M CAN 対応ボード)-(CAN通信)-③Armadillo-420(ATB-M2M CAN 対応ボード)

サンプルプログラム①、②をこちらが製作しているアプリケーションに変更した結果、現状は問題がありそうなのはCAN通信機器のNOVA(ESI MOTION製)とのI/Fではないのかと推測しています。

溝渕です。

> ①ノートPC(WIN10)-(RS232C通信)-②Armadillo-420(ATB-M2M CAN 対応ボード)-(CAN通信)-③Armadillo-420(ATB-M2M CAN 対応ボード)

上記構成 + サンプルプログラム
では問題は発生しない。

ノートPC(WIN10)-(RS232C通信)-Armadillo-420(ATB-M2M CAN 対応ボード)-(CAN通信)-NOVA(ESI MOTION製)

上記構成 + 御社製アプリケーション
では問題は発生する。

のような状況との認識です。

もし、問題の解決に向けて質問されているのであれば、御社製アプリケーションを把握しておらず、NOVA(ESI MOTION製)の仕様も存じない現状に於ては、こちらからアドバイスする事が困難です。可能な限り、情報を絞り込んだ上で質問していただけると回答しやすいです。

もし、今回サンプルプログラムを作成された事で、問題の切り分け(問題箇所の特定)ができたという報告の意図でご連絡くださったという事であれば、進展した事に対し良かったと思います。

溝渕様

返信頂きありがとうございます。

ご指摘のように報告の意図で返信させて頂きました。問題が絞れてきましたのでご協力ありがとうございました。
>もし、今回サンプルプログラムを作成された事で、問題の切り分け(問題箇所の特定)ができたという報告の意図でご連絡くださったという事であれば、進展した事に対し良かったと思います。

溝渕です。

ご報告ありがとうございました。また、お力になれずにすみません。

溝渕様

蒸し返すようですみません。

Armadillo-420でDMAを使用してRS232C通信を行おうと試みています。

>linux-3.14-at時点では、i.MX257のUARTでDMAは無効になっています。現在では以下が適用されており、
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/comm
>i.MXシリーズは全てDMAが有効になっています。上記パッチだけで利用可能になるか不明ですが、試してみる価値はあるかと思います。
>教えて頂いたURLからimx.cを修正しました。(IMX53_UART→IMX25_UARTに置き換え)
>また、Kernel ConfigのDevice Drivers--->DMA Engine suport--->i.MX SDMA supportをENABLEにしました。
>その他にデバイスツリーの編集が必要との認識ですが、~/arch/arm/boot/dts/imx25.dtsiで良いのでしょうか?
>いえ、デバイスツリーは利用していません。
>Armadillo-400シリーズは(ATAGを利用した起動の仕組みで利用する)platform_deviceでハードウェア構成情報を定義します。
>該当ファイルは次の通りです。
> https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_sof

該当ファイルのどこを修正すれば良いのかわかりません、ご教授頂けると助かります。
・mach-armadillo4x0.c
・armadillo4x0_extif.c

溝渕です。

> 該当ファイルのどこを修正すれば良いのかわかりません、ご教授頂けると助かります。
> ・mach-armadillo4x0.c
> ・armadillo4x0_extif.c

目的はuartでDMAを有効化したいという理解で合っていますか?

以前お伝えしたgit.kernel.orgのパッチは、要するに、以下のis_imx6q_uart()が偽になる為DMAが有効化されないという事でして、

drivers/tty/serial/imx.c:
static int imx_startup(struct uart_port *port)
{
:snip
/* Can we enable the DMA support? */
if (is_imx6q_uart(sport) && !uart_console(port) &&
!sport->dma_is_inited)
imx_uart_dma_init(sport);

シンプルのこの判定を削除してみるのが良いかと思います。

また、こちらでは動作実績が無いので、上記修正でDMAが使えるようになるかどうかはわかりません。ただ、やった事(パッチ等)と結果(ログ等)をいただければ、何かしらアドバイスはできるかと思います。

溝渕様

返信ありがとうございます。

> 目的はuartでDMAを有効化したいという理解で合っていますか?
>>
その通りです。

以下の通り試してみました。

(1)以前案内して頂いたgit.kernel.orgに従いimx.cに処置(添付ファイル参照)

(2)Kernel設定は以下のように変更
Device Drivers >
[*]DMA Engine support >
<*>i.MX SDMA support
<*>i.MX DMA support

(3)コンパイルして、linux.bin.gz、romfs.img.gzをArmadillo-420に転送。
>cd /home/atmark/atmark-dist
>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

(4)Armadillo-420を起動してTeraTermからTELNET接続

(5)以下コマンドを実行

[root@armadillo420-0 (pts/0) ~]# cd /sys/class/dma
[root@armadillo420-0 (pts/0) /sys/class/dma]# ll
total 0
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan0 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan0/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan1 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan1/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan10 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan10/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan11 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan11/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan12 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan12/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan13 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan13/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan14 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan14/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan15 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan15/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan16 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan16/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan17 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan17/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan18 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan18/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan19 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan19/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan2 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan2/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan20 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan20/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan21 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan21/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan22 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan22/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan23 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan23/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan24 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan24/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan25 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan25/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan26 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan26/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan27 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan27/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan28 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan28/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan29 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan29/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan3 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan3/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan30 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan30/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan4 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan4/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan5 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan5/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan6 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan6/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan7 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan7/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan8 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan8/
lrwxrwxrwx 1 root root 0 Sep 26 17:32 dma0chan9 -> ../../devices/platform/mxc_ahb/imx25-sdma/dma/dma0chan9/

[root@armadillo420-0 (pts/0) /sys/class/dma]# dmesg | grep -i dma
DMA: preallocated 256 KiB pool for atomic coherent allocations
imx-sdma imx25-sdma: loaded firmware 1.0
imx-sdma imx25-sdma: initialized
mmc0: SDHCI controller on sdhci-esdhc-imx25.0 [sdhci-esdhc-imx25.0] using DMA
[root@armadillo420-0 (pts/0) /sys/class/dma]#

[root@armadillo420-0 (pts/0) /sys/class/dma]# dmesg | grep -i tty
Kernel command line: console=ttymxc1,115200 root=/dev/ram0
imx21-uart.1: ttymxc1 at MMIO 0x43f94000 (irq = 48, base_baud = 7500000) is a IMX
console [ttymxc1] enabled
imx21-uart.2: ttymxc2 at MMIO 0x5000c000 (irq = 34, base_baud = 7500000) is a IMX
imx21-uart.4: ttymxc4 at MMIO 0x5002c000 (irq = 56, base_baud = 7500000) is a IMX
[root@armadillo420-0 (pts/0) /sys/class/dma]#

ファイル ファイルの説明
imx.c

溝渕です。

私に読解力が乏しいのがそもそもの問題と思いますが、どのような意図で投稿されたのかを教えてください。

作業された内容は細かに記載していただいたので理解していますが、何か問題(DMAでなくPIO転送される等)があるという意図でしょうか? それとも意図した通り動作しのでご報告いただいたのでしょうか? または、DMA転送されているか、PIO転送されているか判断できないので確認方法を教えて欲しいという事でしょうか?

溝渕様

以下を確認させて頂きたいです。
・Armadillo-420ではDMAは無効化されているので有効化したい。 → 記載したログからDMAは有効だろうと推測しています。
・UART通信でDMAが有効である事を確認したい。 → コメントを頂きたいです。

溝渕です。

> ・UART通信でDMAが有効である事を確認したい。 → コメントを頂きたいです。

了解です。

まずは、driverでdebug messageを出力するようにすると動作がわかりやすいです。

恐らくCONFIG_DYNAMIC_DEBUGは無効になっていると思いますので、imx.cの先頭に、

#define DEBUG

を入れると出力されるようになります。

この状態で起動ログに、
"cannot get the DMA channel."
のように表示される場合は、DMAが使える状態になっていない事を示します。

その他だと、DMAのcomplete割り込み回数でも確認可能かと思います。割り込み回数は、

[armadillo]# cat /proc/interrupts

のように確認可能です。