课题组定制的开发板上有三个串口,平时调试用的是串口二,通过USB TO UART2转换后可以用usb线进行调试,日常用的时候比较方便,但是近期因为要做实验,实验设备在水下,基于目前的条件,要通过一条五十米的长缆来将宿主机与开发板相连进行调试,usb线的传输距离最长15米左右,因而 考虑将调试口改到串口一,通过RS485协议可以满足远距离通信的需求。这个工作大概分为以下几步:
一.首先修改u-boot
1 安装源代码和工具
先创建安装目录"/home/tl/omapl138/uboot",在命令行执行:
Host# mkdir -p /home/tl/omapl138/uboot
(1) 解压安装 U-Boot 源码
将光盘中 Linux 文件夹下的 U-Boot 源码uboot-03.22.00.06.tar.bz2放到
共享目录 shareVM 中,进入 Ubuntu 安装目录"/home/tl/omapl138/uboot",如下图,执行
以下命令:
Host# cd /home/tl/omapl138/uboot
Host# tar jxvf /mnt/hgfs/shareVM/uboot-03.22.00.06.tar.bz2 -C ./
(此处以uboot-03.22.00.06.tar.bz2 为例,)
2 编译 U-Boot
2.1 清理 U-Boot
进入 U-Boot 源码顶层目录,然后执行以下命令:
Host# make CROSS_COMPILE=arm-none-linux-gnueabi- distclean
这样就清理了整个 U-Boot 编译目录,顶层目录的 u-boot.bin 镜像同时会被删除
2.2 配置 U-Boot
执行以下命令配置 U-Boot:
Host# make CROSS_COMPILE=arm-none-linux-gnueabi- da850sdi_tl_config
2.3 编译 U-Boot
执行以下命令编译 U-Boot:
Host# make CROSS_COMPILE=arm-none-linux-gnueabi- u-boot.ais -j4
-j4 是一个编译选项,告诉 CPU 用 4 个线程去编译,速度会快一些。编译完成后会在
U-Boot 源码的顶层目录生成 u-boot.ais 文件。
完成后如下图:
上面都是创龙教给我们的东西,下面就是我们如何修改的问题了
这是一条严肃的分割线
进入/omapl138/uboot/board/davinci/da8xxevm目录,打开da850sdi.c,先搜tty,将所有的ttyS2改成ttyS1,再搜uart,将所有的uart2改为uart1。好了,第一个文件修改就完成了。
进入/omapl138/uboot/include/configs目录,打开da850sdi.h,先搜tty,将所有的ttyS2改成ttyS1,再搜uart,将所有的uart2改为uart1。好了,第二个文件修改也就完成了。
下一步就是编译了,这么快就修改好了吗?嗯,其实还差一点。。。。。
这里一般都会报错,因为你只是一厢情愿的以为关于串口二的这些内容都定义了,那么改成串口一也没问题吧,其实不然,在编译的时候这些问题会暴露出来,那么接下来的工作,就是看缺什么定义,在对应的文件里一一定义,可能还要查看一下手册,记忆中大部分缺失的东西应该定义在 /asm/arch/hardware.h这个文件里。编译好了之后我们就可以看到能够通过串口一引导的u-boot了,有两种选择,一种是通过CCS把它烧写在nandflash里,然后启动可以看到效果,还有就是通过制作系统启动卡,这个用过创龙板子的人都知道。但是这只是个开始,接下来我们还要加载内核。
二、修改内核解压缩打印串口。
路径和修改内容都可以从下面这幅图中一览无遗了。
修改了之后怎么办?当然是重新编译内核了,下面就把编译完成后的图放一张。
uboot.ais和uImage都有了,那么就可以做系统启动了。
三、修改文件系统中使用的显示终端串口
这个要在根文件系统下找到/etc/inittab进行修改,开发板没有启动起来,何来根文件系统,后来想到不是做系统启动卡了吗,rootfs分区在Linux下是可见的,会不会在这个里面,后面发现果然是,改的话,找到这个文件,打开,在30行左右的位置有这么一句:
S:2345:respawn:/sbin/mingetty --autologin=root ttyS2
老套路:ttyS2改成ttyS1。
四、修改系统启动卡的启动脚本。
如果你在前面做了启动脚本,很有可能发现还是启动不了,即使用
setenv bootcmd 'run commonargs;run mmcboot;'
saveenv
也不行,那该怎么做呢,进行如下修改:
(1) 先在 Ubuntu 中新建一个目录例如 bootscr,将mkimage 文件(创龙光盘或者网上都能找到)拷贝到此目录。然后在此目录新建一个 boot.cmd 文件,将用户的 U-Boot 启动参数写入此文件
并保存。
boot.cmd 内容如下:
setenv bootcmd 'mmc rescan 0;fatload mmc 0 0xc0700000 uImage;bootm c0700000'
setenv bootargs ${mem_args} eth=${ethaddr} 'console=ttyS1,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext3'
saveenv
boot
(2) 在 bootscr 目录执行以下命令,即可在当前目录下生成启动脚本。
Host# ./mkimage -A arm -O linux -T script -C none -a 0xc0600000 -e 0xc0600000 -n
"bootscript" -d boot.cmd boot.scr
用刚刚生成的boot.scr和boot.cmd替换掉启动卡中root目录下的对应文件,恭喜你也解锁用串口一调试的技能了。