开发板:tiny4412ADK+S700 4GB Flash
主机:Wind7 64位
虚拟机:Vmware+Ubuntu12_04
u-boot:U-Boot 2010.12
Linux内核版本:linux-3.0.31
Android版本:android-4.1.2
tiny4412默认是从uart0来输出和读取信息的,而tiny4412上留了两个串口,分别对应的是uart0和uart3,下面我们修改配置,使控制终端从uart0变成uart3
修改u-boot配置
在前面分析u-boot串口驱动的时候发现,在tiny4412.h中定义了
#define CONFIG_SERIAL0 1
然后再初始化串口的时候会根据这个宏找到uart0的控制器基地址,然后配置其波特率等等,并且u-boot的printf最终也会通过向uart0的发送数据寄存器写数据来实现数据的发送,综上,对于u-boot,我们只需要修改tiny4412.h,将
#define CONFIG_SERIAL0 1
修改为:
#define CONFIG_SERIAL3 1
即可
修改u-boot给内核传递的参数bootargs
原来的bootargs是:
console=ttySAC0,115200n8 androidboot.console=ttySAC0 uhost0=n ctp=2 skipcali=y vmalloc=384m lcd=S70
由于改成了uart3,我们需要把bootargs改成:
console=ttySAC3,115200n8 androidboot.console=ttySAC3 uhost0=n ctp=2 skipcali=y vmalloc=384m lcd=S70
修改内核配置
这里主要是内核在自解压的时候打印信息,在这个时候Linux内核还尚未启动,还是直接操作底层的硬件寄存器,并且不再初始化串口,因为之前u-boot已经将uart3初始化了,这里只需要告诉Linux内核的自解压程序使用uart3输出解压信息即可,通过分析之前的Linux下的串口驱动发现,需要将CONFIG_S3C_LOWLEVEL_UART_PORT改成3即可,测试发现,如果不修改这里,内核也无法正常启动,因为在执行putstr时会卡死,此时可以将解压时putstr注释掉即可。
此外,如果打开了Kernel low-level debugging functions,那么还需要如下配置内核:
否则,由于在调用printk的时候,会调用printascii,而printascii是用汇编实现的,他怎么知道应该从哪个串口输出呢(bootargs传的参数tty对其无效)?通过分析arch/arm/mach-exynos/include/mach/debug-macro.S 可以发现,他通过判断宏CONFIG_DEBUG_S3C_UART来知道从哪个串口输出。而上图中S3C UART to use for low-level debug 就是设置宏CONFIG_DEBUG_S3C_UART的。
上一篇:tiny4412 串口驱动分析五 --- LDD3上TTY驱动程序源码
下一篇:tiny4412 串口驱动分析三 --- log打印的几个阶段之内核自解压
推荐阅读最新更新时间:2024-11-02 19:34
设计资源 培训 开发板 精华推荐
- 【亚特联】红外遥控器
- LTC3714 IMVP 解决方案
- 6 输出 600V MGD 应用电路简化了三相电机驱动器
- LT3970EMS 3.3V 降压转换器的典型应用
- DM160223、CAP1296 评估套件为评估和开发使用 CAP12XX 系列的各种电容式触摸感应和接近应用提供了一个简单的平台
- LT1170CQ、5V/5A 高效 5V 降压转换器的典型应用
- LTC3621HMS8E-3.3 1.2Vout、强制连续模式、1MHz 同步降压稳压器的典型应用
- 1810300113 李楠
- LTC3776EUF 演示板、用于 DDR/QDR 存储器终端的 2 相双路降压转换器
- LM431A 可编程并联稳压器的典型应用