openwrt disable serial console message when booting

来源:互联网 发布:网络基础试题及答案 编辑:程序博客网 时间:2024/06/06 09:57

在openwrt启动过程中,向串口的输出主要有四个部分(如下所示):U-Boot 的输出,kernel的输出,文件系统启动过程中的输出(也是kernel输出的一部分,但是打印语句在系统的配置文件中),系统输出。

U-Boot 1.1.4 (Aug 27 2011 - 10:39:39)>AP121-2MB (ar9330) U-boot>DRAM:  32 MBled turning on for 1s...id read 0x100000ffflash size 4194304, sector count = 64Flash:  4 MBUsing default environment>In:    serialOut:   serialErr:   serialNet:   ag7240_enet_initialize...No valid address in Flash. Using fixed addressNo valid address in Flash. Using fixed address: cfg1 0x5 cfg2 0x7114eth0: 00:03:7f:09:0b:adag7240_phy_setupeth0 up: cfg1 0xf cfg2 0x7214eth1: 00:03:7f:09:0b:adathrs26_reg_init_lanATHRS26: resetting s26ATHRS26: s26 reset doneag7240_phy_setupeth1 upeth0, eth1Autobooting in 1 seconds## Booting image at 9f020000 ...   Uncompressing Kernel Image ... OK>Starting kernel ...

(以上为U-Boot打印)

Linux version 2.6.39.4 (juhosg@idared) (gcc version 4.5.4 20110808 (prerelease) (Linaro GCC 4.5-2011.08) ) #1 Tue Sep 20 14:44:37 CEST 2011bootconsole [early0] enabledCPU revision is: 00019374 (MIPS 24Kc)SoC: Atheros AR9330 rev 1Clocks: CPU:400.000MHz, DDR:400.000MHz, AHB:200.000MHz, Ref:25.000MHzDetermined physical RAM map: memory: 02000000 @ 00000000 (usable)Initrd not found or empty - disabling initrdZone PFN ranges:  Normal   0x00000000 -> 0x00002000Movable zone start PFN for each nodeearly_node_map[1] active PFN ranges    0: 0x00000000 -> 0x00002000Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128Kernel command line:  board=TL-WR703N console=ttyATH0,115200 rootfstype=squashfs,jffs2 noinitrdPID hash table entries: 128 (order: -3, 512 bytes)Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytesWriting ErrCtl register=00000000Readback ErrCtl register=00000000Memory: 29376k/32768k available (2009k kernel code, 3392k reserved, 386k data, 180k init, 0k highmem)SLUB: Genslabs=9, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1NR_IRQS:80Calibrating delay loop... 265.42 BogoMIPS (lpj=1327104)pid_max: default: 32768 minimum: 301Mount-cache hash table entries: 512NET: Registered protocol family 16MIPS: machine is TP-LINK TL-WR703N v1bio: create slab  at 0Switching to clocksource MIPSNET: Registered protocol family 2IP route cache hash table entries: 1024 (order: 0, 4096 bytes)TCP established hash table entries: 1024 (order: 1, 8192 bytes)TCP bind hash table entries: 1024 (order: 0, 4096 bytes)TCP: Hash tables configured (established 1024 bind 1024)TCP reno registeredUDP hash table entries: 256 (order: 0, 4096 bytes)UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)NET: Registered protocol family 1squashfs: version 4.0 (2009/01/31) Phillip LougherJFFS2 version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.msgmni has been set to 57io scheduler noop registeredio scheduler deadline registered (default)Serial: 8250/16550 driver, 1 ports, IRQ sharing disabledar933x-uart: ttyATH0 at MMIO 0x18020000 (irq = 11) is a AR933X UARTconsole [ttyATH0] enabled, bootconsole disabledconsole [ttyATH0] enabled, bootconsole disabledAtheros AR71xx SPI Controller driver version 0.2.4m25p80 spi0.0: found s25sl032a, expected m25p80m25p80 spi0.0: s25sl032a (4096 Kbytes)Searching for RedBoot partition table in spi0.0 at offset 0x3e0000Searching for RedBoot partition table in spi0.0 at offset 0x3f0000No RedBoot partition table detected in spi0.0spi0.0: no WRT160NL signature foundCreating 5 MTD partitions on "spi0.0":0x000000000000-0x000000020000 : "u-boot"0x000000020000-0x000000120000 : "kernel"0x000000120000-0x0000003f0000 : "rootfs"mtd: partition "rootfs" set to be root filesystemmtd: partition "rootfs_data" created automatically, ofs=2A0000, len=1500000x0000002a0000-0x0000003f0000 : "rootfs_data"0x0000003f0000-0x000000400000 : "art"0x000000020000-0x0000003f0000 : "firmware"ag71xx_mdio: probedeth0: Atheros AG71xx at 0xb9000000, irq 4Atheros AR71xx hardware watchdog driver version 0.1.0TCP westwood registeredNET: Registered protocol family 17802.1Q VLAN Support v1.8 Ben Greear All bugs added by David S. Miller VFS: Mounted root (squashfs filesystem) readonly on device 31:2.Freeing unused kernel memory: 180k freedlinput: gpio-keys-polled as /devices/platform/gpio-keys-polled/input/input0Button Hotplug driver version 0.4.1

(以上为kernel输出)

- preinit -Press the [f] key and hit [enter] to enter failsafe modeeth0: link up (100Mbps/Full duplex)- regular preinit -JFFS2 notice: (371) jffs2_build_xattr_subsystem: complete building xattr subsystem, 17 of xdatum (0 unchecked, 16 orphan) and 30 of xref (0 dead, 16 orphan) found.switching to jffs2- init -

(以上部分是文件系统输出)

BusyBox v1.18.5 (2011-09-17 19:36:07 CEST) built-in shell (ash)Enter 'help' for a list of built-in commands.>  _______                     ________        __ |       |.-----.-----.-----.|  |  |  |.----.|  |_ |   -   ||  _  |  -__|     ||  |  |  ||   _||   _| |_______||   __|_____|__|__||________||__|  |____|          |__| W I R E L E S S   F R E E D O M ATTITUDE ADJUSTMENT (bleeding edge, r28258) ----------  * 1/4 oz Vodka      Pour all ingredients into mixing  * 1/4 oz Gin        tin with ice, strain into glass.  * 1/4 oz Amaretto  * 1/4 oz Triple sec  * 1/4 oz Peach schnapps  * 1/4 oz Sour mix  * 1 splash Cranberry juice -----------------------------------------------------root@OpenWrt:/# 

(最后部分是系统输出)


1. 首先,取消系统输出。
注释掉/etc/inittab中的ttyATH0::askfirst:/bin/ash --login


2. 首先,禁止kernel的输出较简单,重新编译镜像前,在make kernel_menuconfig时,选择Kernel hacking ----> 找到Early printk,将其取消选中,保存设置,make编译镜像即可。http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:debug:early_printk
其他方法(在wr703n中均测试失败,网络上有人测试成功):
1)在编译目录下找到./target/linux/<对应的平台>/config-3.3,找到文件中的CONFIG_CMDLINE去掉console=ttyATH0,115200,或者改成console=none,然后重新编译镜像。
2)因为kernel的message都是printk打印的,可以提高console的message打印级别,将/proc/sys/kernel/printk中第一个值改成0或者1:
echo 0 > /proc/sys/kernel/printkcat /proc/sys/kernel/printk0   4   1   7

或者在/etc/config/system下添加
option 'conloglevel' '1'option 'kconloglevel' '1'

如果使用了后面的设置,前面的printk中的第一个值会被强制设置为system中的值。


3)还有一种方案是在u-boot中取消console设置,例如:
U-Boot 1.1.2 (Dec 14 2005 - 12:12:14)U-Boot code: 21F00000 -> 21F1666C BSS: -> 21F1AC44RAM Configuration:Bank #0: 20000000 32 MBFlash: 16 MBIn: serialOut: serialErr: serialHit any key to stop autoboot: 0U-Boot> setenv bootargs console=none root=/dev/ramU-Boot> saveenvSaving Environment to Flash...Un-Protected 1 sectorsErasing Flash.... doneErased 1 sectorsWriting to Flash...\done


不同的硬件进入U-Boot的方式不同,像tp的wr703是在出现"Autobooting in 1 seconds"后快速输入tpl。
这种方案可能在某些支持saveenv 的U-Boot中使用,像wr703是不能这样处理的,因为它没有saveenv命令。
如果想使用U-Boot永久性的改变这些环境变量,需要重新编译镜像使得U-Boot所处的flash可写。
在target/linux/ar71xx/files/drivers/mtd/tplinkpart.c修改:
static struct mtd_partition tl_wr1043nd_partitions[] = {  {    .name   = "u-boot",    .offset   = 0,    .size   = 0x020000,    .mask_flags = MTD_WRITEABLE,  } , {    .name   = "kernel",    .offset   = 0x020000,    .size   = 0x140000,  } , {    .name   = "rootfs",    .offset   = 0x160000,    .size   = 0x690000,  } , {    .name   = "art",    .offset   = 0x7f0000,    .size   = 0x010000,    .mask_flags = MTD_WRITEABLE,  } , {    .name   = "firmware",    .offset   = 0x020000,    .size   = 0x7d0000,  }};

去掉“u-boot”块中的“.mask_flags = MTD_WRITEABLE”,并重新编译镜像。


3。 取消文件系统的输出。
在这个阶段没有找到很好的取消serial console输出的方法。需要找到输出文件,挨个取消。
这些配置文件虽然在系统中存在,但是不能修改文件系统的配置,需要在源码中修改并重新编译镜像。
需要修改的一共有6个文件,7个函数。具体列表如下:
1)10_indicate_preinit: preinit_echo和pi_indicate_preinit
2)20_check_jffs2_ready:mount_no_jffs2
3) 30_failsafe_wait:fs_wait_for_key
4) 40_merge_overlay_hooks:merge_overlay_hooks
5) 50_indicate_regular_preinit:indicate_regular_preinit
6) 70_pivot_jffs2_root:rootfs_pivot
具体修改方法如下:
在源码根目录下建立一个新的目录files/lib/preinit/;
在该目录下分别建立包含需重定义函数的文件的副本(注意文件名的数字部分要大于原来的文件):
1)15_indicate_preinit
2)25_check_jffs2_ready
3) 35_failsafe_wait
4) 45_merge_overlay_hooks
5) 55_indicate_regular_preinit
6) 75_pivot_jffs2_root
每个副本中的函数去掉其中的打印语句部分-“echo ***”

然后重新编译镜像。


4. U-Boot打印部分(没有测试完全)
找到一份可编译的U-Boot源码,这里我使用的是https://code.google.com/p/wr703n-uboot-with-web-failsafe/提供的一个针对wr703n的U-Boot源码。
在代码中找到./u-boot/include/configs/<对应平台> .h,(wr703n对应ar7240.h)定义一个宏: #define CONFIG_SILENT_CONSOLE 1;重新编译U-Boot。
在启动后通过设置U-Boot的环境变量silent=1,再重新启动后即可消除U-Boot的输出。(由于wr703n没有saveenv命令,不能保存环境变量,故而没有测试成功,可以尝试在源码中直接设定silent的值)此种方法同样需要U-Boot可写,方式同2中所述。
介绍详情见:https://github.com/linux-sunxi/u-boot-sunxi 和 U-Boot源码中的/u-boot/doc/README.silent。


附:
1. 用u-boot更新镜像步骤:
1)将pc的IP设定为192.168.1.2, 子网掩码255.255.255.0;并安装tftp服务器,将需要安装的镜像放置在tftp根目录下;
2)用网线将路由器和pc连接起来;在u-boot里操作:(这些命令一般是可行的,有些数据地址可能会随着硬件的不同而不同)
setenv ipaddr 192.168.1.1setenv serverip 192.168.1.2tftpboot 0x80000000 openwrt-xxx-generic-xxx-squashfs-factory.binerase 0x9f020000 +0x332004cp.b 0x80000000 0x9f020000 0x332004boot.m 0x9f020000

2. 更新u-Boot(更新有风险,需谨慎操作)
将编译好的u-boot和一个安装shell文件放在/tmp/目录下,执行shell文件后重新启动即可。shell文件内容如下:
#! /bin/shUBOOT_NAME=/tmp/tuboot.binRAW_UBOOT_LEN=`wc -c $UBOOT_NAME | awk '{print $1 }'`NEED_PAD_LEN=$((0x1fc00-$RAW_UBOOT_LEN))#Generate a file used as pad ...dd if=/dev/zero of=/tmp/pad.bin bs=1 count=$NEED_PAD_LENcat $UBOOT_NAME /tmp/pad.bin >/tmp/tuboot_0x1fc00.binecho "Backup some config first,just like MAC address ..."dd if=/dev/mtd0 of=/tmp/config.bin bs=1 skip=$((0x1fc00))cat /tmp/tuboot_0x1fc00.bin /tmp/config.bin >uboot.bincat uboot.bin >/dev/mtdblock0sync


3. tftp 工具:http://download.csdn.net/detail/wonengxing/5851839

原创粉丝点击