2440启动串口输出乱码问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2440 移植2.6.30 (转)

解压缩内核压缩文件后进入到目录中,然后修改Makefile,找到

ARCH ?=

CROSS_COMPILE ?=

这两项,不修改这两项的话将会默认使用x86的配置,这里修改为

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

arm-linux- 是交叉编译器~ 这里我使用的交叉编译器为友善送的arm-linux-gcc-4.3.2.tgz,带EABI

然后执行make menuconfig,然后进入System Type中看看是否为ARM体系~

第一行为ARM system type 说明没错~ 然后在ARM system type中选择SamSung

“S3C2410...”

随后在下面出现的S3C2440 Machines中选择SMDK2440

退出保存~ 执行make zImage

出现ERROR

drivers/video/console/vgacon.c:510:error “PCIMEM_BASE undeclared”

是在vgacon_startup中,vgacon是啥?~ 不认识~ 应该是不必要的东西~ 去掉它~

vim drivers/video/console/Makefile

在里面看见了这句

obj-$(CONFIG_VGA_CONSOLE) += vgacon.o

然后执行find ./ -name “Kconfig” | xargs grep “VGA_CONSOLE”

看见config VGA_CONSOLE 在driver/video/console/Kconfig中

也就是说在驱动->视频->终端中,执行make menuconfig

在Device Drivers->Graphics Support->Console display driver support中发现了VGA text console

去掉它,保存设置后再编译

编译完成后将在arch/arm/boot中得到zImage文件

使用SuperVivi的USB加载功能启动这个内核文件~ 得到下列输出

zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999

NOW, Booting Linux......

Uncompressing Linux........................................................................................................ done, booting the kernel.

失败

信息不够丰富~ 根据kasim大大的指点,在配置中进入Kernel hacking

打开Kernel debugging和Kernel low-level debugging functions 还有Kernel low-level debugging messages via S3C UART

保存后再编译

运行zImage后得下列输出

zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999

NOW, Booting Linux......

Uncompressing Linux........................................................................................................ done, booting the kernel.

Error: unrecognized/unsupported machine ID (r1 = 0x000007cf).

Available machine support:

ID (hex) NAME

0000016a SMDK2440

Please check your kernel config and/or bootloader.

失败

原来是machine的ID和Supervivi传递进来的ID不匹配~

关于machine ID,可以参考一下这篇文章

<2.6.18-2内核中对S3C2440的引导启动分析>

虽然版本老了点,但是核心思想还是没有变

vim arch/arm/mach-s3c2440/mach-smdk2440.c

在最后一段有这句MACHINE_START(S3C2440 , ”SMDK2440”)

这里S3C2440就是machine ID的代号~ 呢具体值是多少呢?~

在arch/arm/tools/mach-types中

s3c2440 ARCH_S3C2440 S3C2440 362

原来我们的machine ID是362~

呢bootloader传递进来的值是多少呢?~

Error: unrecognized/unsupported machine ID (r1 = 0x000007cf).

注意到没有?~ 0x7CF转换成10进制也就是1999

修改mach-types中的对应项

s3c2440 ARCH_S3C2440 S3C2440 1999

虽然这样就和下面MINI2440的1999冲突了,但是只要不加入MINI2440的配置就没事修改后编译,再执行zImage后得下列输出

zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0" MACH_TYPE = 1999

NOW, Booting Linux......

Uncompressing Linux........................................................................................................ done, booting the kernel.

失败

咦?~ 啥都没有?~ 最起码也应该有个乱码吧这时候我的第一反应是会不会没有跳入到start_kernel中

所以马上编辑init/main.c,在start_kernel的前部加上printk(KERN_INFO “in start_kernel \n”);

但是这个时候内核还没有初始化,所以printk是没有作用的~

相关文档
最新文档