
Xilinx-v2013.4(3.12カーネル)からXilinx-v2016.2(4.4カーネル)にpicozedプラットフォームベースの組み込みシステムを移植しています。以前のバージョンでは初期RAMディスク(initrd)を使用していましたが、最新バージョンでは初期RAM fs(initramfs)を使用していました。
起動時に、コンソールはUSBコネクタのシリアルインタフェースを介して提供されます。 ttyPS0になりたいです。この時点で、「console-ttyPS0」の関係がどのように完成するかはもうわかりません! ?デバイスツリーから出ますか(ttyPS0への言及はまったくありません)?以前のバージョン(RAMディスク)では、「init」スクリプトまたは「mdev」構成ファイルでも構成されていませんでした。
ブートプロセスが実行中で停止しました。出力は次のとおりです。
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Linux version 4.4.0-test (pierrett@build0109-linux) (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-23) ) #1 SMP PREEMPT Thu Aug 18 12:10:52 CEST 2016
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: zynq
bootconsole [earlycon0] enabled
cma: Reserved 16 MiB at 0x3dc00000
Memory policy: Data cache writealloc
PERCPU: Embedded 12 pages/cpu @ef7d2000 s18240 r8192 d22720 u49152
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 260608
Kernel command line: bootargs=console=ttyPS0,115200 root=/dev/ram initrd=0x8000000 rw earlyprintk rootwait
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 1009532K/1048576K available (4456K kernel code, 213K rwdata, 1564K rodata, 240K init, 193K bss, 22660K reserved, 16384K cma-reserved, 238976K highmem)
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0xf0800000 - 0xff800000 ( 240 MB)
lowmem : 0xc0000000 - 0xf0000000 ( 768 MB)
pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
.text : 0xc0008000 - 0xc05e949c (6022 kB)
.init : 0xc05ea000 - 0xc0626000 ( 240 kB)
.data : 0xc0626000 - 0xc065b450 ( 214 kB)
.bss : 0xc065b450 - 0xc068bb54 ( 194 kB)
Preemptible hierarchical RCU implementation.
Build-time adjustment of leaf fanout to 32.
RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
RCU: Adjusting geometry for rcu_fanout_leaf=32, nr_cpu_ids=2
NR_IRQS:16 nr_irqs:16 16
ps7-slcr mapped to f0802000
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
zynq_clock_init: clkc starts at f0802100
Zynq clock init
sched_clock: 64 bits at 333MHz, resolution 3ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x4ce07af025, max_idle_ns: 440795209040 ns
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537538477 ns
ps7-ttc #0 at f080a000, irq=18
Console: colour dummy device 80x30
console [tty0] enabled
bootconsole [earlycon0] disabled
私の考えでは、問題が誤ったコンソール設定から来ているようです。ブートログで、ブートパラメータの「tty0」が有効になっており、コンソールをttyPS0に配置したいことがわかります。
起動時に正しいコンソールを設定する方法を説明できる人はいますか?
追加情報:
- デバイスツリーシリアル構成:
ps7_uart_1: serial@e0001000 { 時計名="ref_clk"、"aper_clk"; 時計=<0x2 0x18 0x2 0x29>; 互換 = "xlnx、xuartps"; 現在の速度= <115200>; device_type = "シリアル"; 割り込み上位= <&ps7_scugic_0>; 割り込み= <0x0 0x32 0x4>; ポート番号 = <0x0>; reg = <0xe0001000 0x1000>; xlnx、hasmodem = <0x0>; };
- 開始パラメータ:
console=ttyPS0,115200 root=/dev/ram initrd=0x8000000 rw Earlyprintk rootwait
- カーネルシリアル構成:
# #シリアルドライバ #CONFIG_SERIAL_EARLYCON=y #CONFIG_SERIAL_8250 が設定されていません。 # #8250以外のシリアルポートをサポート # #CONFIG_SERIAL_AMBA_PL010 が設定されていません。 #CONFIG_SERIAL_AMBA_PL011 が設定されていません。 #CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST が設定されていません。 #CONFIG_SERIAL_MAX3100が設定されていません。 #CONFIG_SERIAL_MAX310Xが設定されていません。 CONFIG_SERIAL_UARTLITE=m CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y #CONFIG_SERIAL_JSMが設定されていません。 #CONFIG_SERIAL_SCCNXP が設定されていません。 #CONFIG_SERIAL_SC16IS7XX が設定されていません。 #CONFIG_SERIAL_BCM63XX が設定されていません。 #CONFIG_SERIAL_ALTERA_JTAGUARTが設定されていません。 #CONFIG_SERIAL_ALTERA_UARTが設定されていません。 #CONFIG_SERIAL_IFX6X60 が設定されていません。 CONFIG_SERIAL_XILINX_PS_UART=y CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y #CONFIG_SERIAL_ARC が設定されていません。 #CONFIG_SERIAL_RP2が設定されていません。 #CONFIG_SERIAL_FSL_LPUART が設定されていません。 #CONFIG_SERIAL_CONEXANT_DIGICOLORが設定されていません。 #CONFIG_SERIAL_ST_ASCが設定されていません。 #CONFIG_SERIAL_STM32 が設定されていません。 #CONFIG_TTY_PRINTK が設定されていません。 #CONFIG_HVC_DCCが設定されていません。 #CONFIG_VIRTIO_CONSOLEが設定されていません。 #CONFIG_IPMI_HANDLER が設定されていません。 #CONFIG_HW_RANDOM が設定されていません。 CONFIG_XILINX_DEVCFG=y #CONFIG_R3964が設定されていません。 #CONFIG_APPLICOM が設定されていません。 #CONFIG_RAW_DRIVER が設定されていません。 #CONFIG_TCG_TPMが設定されていません。 CONFIG_DEVPORT=y #CONFIG_XILLYBUS が設定されていません。
"inittab"エントリ:
ttyPS0::respawn:/sbin/getty -L ttyPS0 115200 vt100#GENERIC_SERIAL
答え1
dmesg に UART 行は表示されません。また、デバイスツリーで少なくとも1つのuartを設定する必要があります。
ここでは、シリアルコンソールが有効なARM A20、Lamobo R1を使用しています。 (115200、8、N、1)
私の具体的なケースでは、次のようになります。
dmesgから
[ 3.456402] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[ 3.480137] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 41, base_baud = 1500000) is a U6_16550A
[ 3.503990] 1c28c00.serial: ttyS1 at MMIO 0x1c28c00 (irq = 42, base_baud = 1500000) is a U6_16550A
[ 3.505687] console [ttyS1] enabled
[ 3.529520] 1c29c00.serial: ttyS2 at MMIO 0x1c29c00 (irq = 43, base_baud = 1500000) is a U6_16550A
/boot/boot.cmd
でコンパイルされるカーネルの私のオプションは次/boot/boot.scr
のとおりです。
setenv bootargs "console=ttyS1,115200n8 root=/dev/sda2 rootwait rootfstype=ext4 sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve sunxi_fb_mem_reserve=0 panic=10 enforcing=0 loglevel=1 ipv6.disable=1"
ご覧のとおり、シリアルをコンソールとして定義し、ヘッドレスモードでUSB-RS232 TTL UART PL2303HXケーブルのみを使用しているため、リソースを節約するためにMaliグラフィックモードのサポートを削除してメモリを予約してみました。
systemdの代わりにsysVでArmBian / Debianを使用しているので、次のことも行います/etc/inittab
。
T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100
についてはデバイスツリー
uart0: serial@01c28000 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins_a>;
status = "okay";
};
uart3: serial@01c28c00 {
pinctrl-names = "default";
pinctrl-0 = <&uart3_pins_b>;
status = "okay";
};
uart7: serial@01c29c00 {
pinctrl-names = "default";
pinctrl-0 = <&uart7_pins_a>;
status = "okay";
};
使用されたカーネルコンパイル時間オプションの場合:
$zcat /proc/config.gz | grep 8250
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_NR_UARTS=8
CONFIG_SERIAL_8250_RUNTIME_UARTS=8
# CONFIG_SERIAL_8250_EXTENDED is not set
CONFIG_SERIAL_8250_FSL=y
CONFIG_SERIAL_8250_DW=y
# CONFIG_SERIAL_8250_EM is not set
# CONFIG_SERIAL_8250_RT288X is not set
# Non-8250 serial port support
# CONFIG_DEBUG_LL_UART_8250 is not set
CONFIG_DEBUG_LL_INCLUDE="debug/8250.S"
CONFIG_DEBUG_UART_8250=y
CONFIG_DEBUG_UART_8250_SHIFT=2
# CONFIG_DEBUG_UART_8250_WORD is not set
# CONFIG_DEBUG_UART_8250_PALMCHIP is not set
# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set
これに加えて、以下が必要です。CONFIG_SERIAL_CORE_CONSOLE=y
答え2
解決策を見つけました!
- デバイスツリー(選択したセクション)に標準出力の定義を追加します。
linux、stdout-path = "serial0:115200n8";
ここでserial0は私のシリアルインターフェースを指します。
- カーネル構成で仮想ターミナルコンソールを無効にします(このドライバの優先順位を避けるため):
VT=y 構成 #CONFIG_VT_CONSOLEが設定されていません。
@Rui F Ribeiroと@Josh Bensonのサポートに感謝します。
挨拶