嵌入式linux屏蔽终端串口打印的信息


《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》

嵌入式linux产品开发,大部分不希望串口或telnet输出调试信息。一下介绍如何屏蔽打印调试信息。

整个系统运行过程分3个部分:bootstrapuboot、内核及根文件系统,bootstrapat91sam9260在从片内启动,运行bootstrap串口无打印信息,但at91sam9260芯片启动会向串口输出“RomBOOT”信息,此部分无法屏蔽。所以只需屏蔽掉uboot、内核及根文件系统向串口输出的信息,方法如下:

1Uboot部分

使Uboot中串口静默、uboot所有信息不打印,但是要注意配置好自启动命令,以便可以启动linux内核。因env_common.c中用到uchar default_environment[]结构,可以添加CONFIG_EXTRA_ENV_SETTINGS,在/u-boot-1.3.4/include/configs/at91san9260ek.h中最后一行添加以下代码:

#define CONFIG_EXTRA_ENV_SETTINGS "silent=1\0"

#define CONFIG_SILENT_CONSOLE 1

2内核部分

1配置选项

#make menuconfig

去掉控制台配置选项( CONFIG_SERIAL_ATMEL_CONSOLE

Devices drivers -> character drivers->serial drivers->

[]support for console on AT91/AT32 serial port 

2去掉自解压时的打印信息

在运行内核开始会有以下打印信息:

Uncompressing Linux... done, booting the kernel.

在内核源文件/Linux-2.6.36/arch/arm/boot/compressed/misc.c中的 decompress_kernel()函数中注释掉以下代码:

putstr("Uncompressing Linux...");

putstr(" done, booting the kernel.\n");

3根文件系统部分

把根文件系统/etc/inittab文件中的

:2345:askfirst:-/sbin/getty 115200 ttyS0

更改为

:2345:askfirst:-/sbin/getty tty0

4、调试

以上更改后,重新下载uboot、内核及根文件系统,查看调试串口输出的信息,可以看到每次加电系统运行只有at91sam9260芯片启动时输出的信息,如下图所示:

 

2.27 系统启动图

待系统进入内核运行应用程序后,串口无其它打印信息则屏蔽成功。

 

### 嵌入式 Linux 的安装方法 对于嵌入式系统的开发而言,Linux 操作系统因其开源特性而被广泛采用。安装嵌入式 Linux 主要涉及以下几个方面: - **构建交叉编译环境**:由于目标设备通常具备足够的资源来直接编译程序,因此需要在宿主机上建立一个针对特定架构(如 ARM、MIPS 等)的交叉编译工具链。 - **准备引导加载器 (Bootloader)**:这是用来初始化硬件并加载操作系统映像的第一段可执行代码。常见的 Bootloader 如 U-Boot 可以为多种处理器平台提供支持[^1]。 - **定制内核配置**:根据实际需求裁剪内核功能模块,减少必要的组件以适应有限的存储空间;同时调整驱动程序以便更好地匹配所使用的外设接口。 - **创建根文件系统**:这包含了运行应用程序所需的库文件和其他必要数据结构。可以基于 BusyBox 来简化这一过程,它是一个集成了大量标准 Unix 工具的小型软件包集合。 - **烧录镜像至目标板**:最后一步就是通过 JTAG 或者 SD 卡等方式把整个系统固件写入到最终产品中去。 ### 嵌入式 Linux 启动流程详解 当电源接通之后,CPU 执行的第一个指令地址指向 ROM 中预置好的初始向量表位置,在那里会找到一段简单的汇编语言写的启动代码负责完成最基本的设置工作,比如堆栈指针设定以及中断控制器屏蔽等操作。 随后进入 C 语言级别的初始化阶段,主要任务包括但限于内存管理单元 MMU 配置、时钟频率调节、串口调试端口开启等等。紧接着便是调用 start_kernel 函数正式拉开了内核主体部分的工作序幕——解析命令行参数传递给 kernel_main() 继续后续处理直至成功激活第一个用户态进程 init[]^3]。 ```bash # 示例:查看当前正在使用的 init 进程 ID 和其对应的控制终端 ps axo pid,tty,comm | grep '^[ ]*1' ``` 一旦 rootfs 被正确挂载后,init 将依据 /etc/inittab 文件定义的同 runlevel 下应采取的动作序列化地触发相应服务脚本被执行,从而实现完整的开机自启机制[^4]。 值得注意的是,同版本之间可能存在细节上的区别,并且随着时间推移官方也会断优化改进启动逻辑使得效率更高安全性更强[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值