|
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
|
](AM3517)修改u-boot与Linux调试串口以及文件系统显示终端串口
1.背景 近期一个项目,使用TI Cortex-A8的芯片AM3517作为主控开发。前期使用北京瑞泰公司的ICETEK-AM3517-KB核心板搭建开发环境。在自己做底板布板的时候的时候涂个布线方便,改用UART1作为调试串口,而原来瑞泰给的开发包,已经TI的AM3517 PSP均以UART3作为调试串口。于是在底板焊接完成调试的时候就有了一天痛苦的经历和这篇文章。 在原版的PSP中, 一共有五处使用到UART3作为打印和调试串口: (1)Xloader的打印串口 (2)u-boot的打印串口 (3)内核解压时的信息打印串口 (4)内核调试串口 (5)文件系统中使用的显示终端串口 以上第一处Xloader的打印信息量少且系统中不需要使用,不做修改。本文中讲述后四种情况的修改。 2.1 修改u-boot打印串口 AM3517的串口符合TL16C550标准的,所以驱动也是使用16550的驱动,默认情况下,我们只需要提供需要配置的串口的基地址和中断号等资源给16550的驱动,寄存器的配置不需要我们去关心。且在瑞泰提供开发包中UART1,UART2,UART3引脚配置均配置为M0模式所以不用去修改引脚复用寄存器。仅需在修改u-boot代码中include/configs/am3517_icetek.h的如下代码段: 90 #define CONFIG_CONS_INDEX 3 90 #define CONFIG_CONS_INDEX 1 重新编译u-boot,得到u-boot.bin,烧写至nandflash,重新启动,Xloader启动信息打印在UART3,u-boot启动信息打印在UART1。 2.2修改内核解压缩打印串口 内核解压缩信息打印使用的串口,在linux内核源码程序中。进入linux源码文件根目录,找到 arch/arm/mach-omap2/include/mach/uncompress.h,打开之后发现里面只有一行: 找到arch/arm/plat-omap/include/mach/uncompress.h,打开后发现以下代码: 由以上可知内核解压缩信息打印所使用的串口配置以来Linux内核调试串口的配置,与内核调试串口相同。 2.3修改内核调试串口 内核调试串口的配置在Linux诶和配置中选择。在Linux源代码根目录下运行一下命令: make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig 打开配置界面后,找到一下选项: System Type ---> TI OMAP Implementations ---> Low-level debug console UART (UART3) ---> 修改为: Low-level debug console UART (UART1) ---> 这里的 (UART1) 表示调试串口选择UART1。 保存后退出配置界面,运行以下命令重新编译内核: make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage 将编译后的内核烧写至nandflash,设置u-boot启动参数从nandflash启动,启动内核。在UART1打印出内核解压以及内核启动信息如下: NAND read: device 0 offset 0x280000, size 0x500000 Starting kernel ... Uncompressing Linux................................................................................................................................................. done, booting the kernel. ...................................................... 2.4修改文件系统中使用的显示终端串口 系统中使用的终端显示串口配置在/etc/inittab文件中。打开开发板根文件系统下的/etc/inittab文件,找到一下信息: 31 S:2345:respawn:/sbin/getty 115200 ttyS2 将其修改为: 31 S:2345:respawn:/sbin/getty 115200 ttyS0 完成全部修改任务。 3.感触 (1)Linux开源特性,使得我们可以很好地对其进行源码级的修改,使其适合于我们的设计要求。 (2)在进行系统设计时一定要先做好仔细前期准备。尤其在做硬件设计时,一定要充分考虑使用中要用到的资源,不然就会造成后期软件设计者更多的麻烦。 (3)在做系统设计时一定要充分利用现有资源,在现有基础上进行设计开发。本文作者若完全按照以前的设计在设计底板时使用UART3作为调试串口,就不会出现见天一天的纠结,浪费了一天的开发时间。
|
AM3517板整个开发过程记录
最近时间一直在做一个新项目,同时也是对旧项目的硬件平台进行一个升级,所以用了sitara am3517 Cortex-A8做了一块主板。以下简单介绍一下整个开发过程的建立以及在中间遇到的一些问题及其解决方法。希望对新人有所帮助.
1、平台硬件资源简介
CPU:TI Sitara AM3517+
DDR2:SAMSUNG K4T1G164QE-HCE7
Nand:SAMSUNG K9F1g08UOD
PHY:NS DP83848C
建立TFTP Server
1、安装相关软件包:Ubuntu tftp(服务端),tftp(客户端),xinetd
root@xf:/# apt-get install tftpd tftp xinetd
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列【新】软件包将被安装:
tftp tftpd xinetd
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 185kB 的软件包。
解压缩后会消耗掉 578kB 的额外空间。
获取:1 http://mirrors.sohu.com/ubuntu/ karmic/universe tftp i386 0.17-17ubuntu1 [17.6kB]
获取:2 http://mirrors.sohu.com/ubuntu/ karmic/main xinetd i386 1:2.3.14-7ubuntu2 [151kB]
获取:3 http://mirrors.sohu.com/ubuntu/ karmic/universe tftpd i386 0.17-17ubuntu1 [16.5kB]
下载 185kB,耗时 2秒 (79.6kB/s)
选中了曾被取消选择的软件包 tftp。
(正在读取数据库 ... 系统当前共安装有 173693 个文件和目录。)
正在解压缩 tftp (从 .../tftp_0.17-17ubuntu1_i386.deb) ...
选中了曾被取消选择的软件包 xinetd。
正在解压缩 xinetd (从 .../xinetd_1%3a2.3.14-7ubuntu2_i386.deb) ...
选中了曾被取消选择的软件包 tftpd。
正在解压缩 tftpd (从 .../tftpd_0.17-17ubuntu1_i386.deb) ...
正在处理用于 man-db 的触发器...
正在处理用于 ureadahead 的触发器...
正在设置 tftp (0.17-17ubuntu1) ...
正在设置 xinetd (1:2.3.14-7ubuntu2) ...
* Stopping internet superserver xinetd
[ OK ]
* Starting internet superserver xinetd
[ OK ]
正在设置 tftpd (0.17-17ubuntu1) ...
Note: xinetd currently is not fully supported by update-inetd.
Please consult /usr/share/doc/xinetd/README.Debian and itox(8).
2、建立配置文件
在/etc/xinetd.d/下建立一个配置文件tftp
sudo vim tftp
在文件中输入以下内容:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
保存退出。
3、建立Ubuntu tftp服务文件目录(上传文件与下载文件的位置),并且更改其权限
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot -R
4、重新启动服务
sudo /etc/init.d/xinetd restart
至此Ubuntu tftp服务已经安装完成了,下面可以对其进行一下测试。(在当前目创建2.c,在tftpboot目录下创建1.c和2.c,且
tftpboot目录下2.c权限为777)
执行get命令时,保证tftpboot目录下的文件权限为777,
执行put命令时,必须先在tftpboot目录下新建一个和上传文件同名的文件且权限为777.
root@xf:/home# tftp 127.0.0.1
tftp> get 1.c
Received 7 bytes in 0.1 seconds
tftp> put 2.c
Sent 10 bytes in 0.0 seconds
tftp> quit
qt4编译
make confclean
./configure -xplatform /qws/xxxx -embedded arm -static -little-endian/-big-endian
2、编译
安装ubuntu10.04,toolchain等相应环境。
export PATH=$PATH:/opt/4.4.3/bin/
编译x-loader
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- am3517evm_config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
./signGP x-load.bin
编译u-boot
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- am3517_evm_config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
编译kernel
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- am3517_evm_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
setenv bootargs 'mem=256M console=ttyS2,115200n8 noinitrd root=/dev/mtdblock4 rw rootfstype=jffs2 omapfb.rotate=1 omapfb.rotate_type=1 omap_vout.vid1_static_vrfb_alloc=y;'
3、利用busybox制作root file system
编译busybox
make menuconfig
(1)
(2)
(3)
make
make install
构建框架
cd /home/user/
mkdir rootfs
cd rootfs
mkdir –p dev lib etc sys proc mnt var tmp data
chmod 777 *
添加内容
/bin与/sbin目录
cp –rf busybox-1.17.2/_install/bin ./
cp –rf busybox-1.17.2/_install/sbin ./
/dev目录
mknod dev/console c 5 1
mknod dev/null c 1 3
chmod 777 dev/*
/lib目录
cp /opt/4.4.3/arm-none-linux-gnueabi/lib/* ./lib/
/etc目录
fstab:指明需要挂载的文件系统
inittab:init进程的配置文件
profile:用户环境配置文件
init.d目录:启动文件目录,该目录中有个名为rcS的文件,里面存放了系统启动时配置以及自启动加载的进程等。
/proc、/mnt、/var、/tmp目录
基本都是空目录。
/mnt一般用做临时挂载某个文件系统,比如说u盘。
/tmp用于存放临时文件,我挂载为了ramfs,用于下载文件,应用程序放置,内存文件系统访问速度相当快,不比nand,加快了访问速度,而且增强了nand寿命。
/data目录
挂载为了yaffs2文件系统,可以用于读写,用于存储一些需要保存的数据。
4、制作jffs2
mkfs.jffs2 -r ./rootfs -o rootfs.jffs2 -e 0x20000 -p=0x1000000 -n
5、烧写程序
uboot下烧写x-loader
mw.b 0x80000000 0xff 0x100000
tftp 0x80000000 192.168.0.100:x-load.bin.ift
nand erase 0 40000
nandecc hw
nand write.i 0x80000000 0 40000
烧写u-boot
mw.b 0x80000000 0xff 0x100000
tftp 0x80000000 192.168.0.100:u-boot.bin
nand erase 80000 1c0000
nandecc sw
nand write.i 0x80000000 80000 1c0000
烧写kernel
mw.b 0x80000000 0xff 0x500000
tftp 0x80000000 192.168.0.100:uImage
nand erase 280000 500000
nandecc sw
nand write.i 0x80000000 280000 300000
6、测试ramdisk
nfs
setenv bootargs 'console-ttyS2,115200n8 noinitrd rw ip=192.168.0.250:192.168.0.103:192.168.0.1:255.255.255.0::eth0:off eth=00:40:01:2B:64:60 root=/dev/nfs
nfsroot=192.168.0.103:/home/realtimedsp/workdir/am3517/filesys,nolock,mem=256M'
tftp
tftp 0x81000000 ramdisk.gz
setenv bootargs mem=256M console=ttyS2,115200n8 root=/dev/ram0 initrd=0x81000000,40M ramdisk_size=40960;
setenv bootcmd 'nand read.i 0x80000000 280000 500000;bootm 0x80000000'
boot
更新root
flash_eraseall -j /dev/mtd4
mkdir -p /mnt/nand
mount -t jffs2 /dev/mtdblock4 /mnt/nand
cd /mnt/nand
mkdir -p /mnt/data
mount -t jffs2 /dev/mtdblock5 /mnt/data
cd /mnt/data
tftp -r flashImage.tar -g 192.168.0.103
tar zxvf flashImage.tar
分区表
x-loader 0-0x80000
uboot 0x80000-0x240000
param 0x240000-0x280000
kernel 0x280000-0x780000
root 0x780000-0x1b80000
7、空板烧录
在使用flash V1.6烧录时,注意根据使用的flash型号修改以下的几个配置文件
因为我们使用的是Sumsung K9F1G08.故修改以下信息
omapflash2nd.txt
修改CUSTOM_AM35XX_BOARD dnld_startup_omap3_gp_1g.2nd
configuration_custom_am35xx.txt
烧写x-loader
memory NANDINFO1BITBOOT driver Targets\Flash-Drivers\nand_onfi_16bit_8bit.bin parameters gpmc 0x6E000000 cs 0 address 0x30000000 bberase 0 onfi 0 bpp 2048 sbpp 64 ppb
64 bpl 1024 l 1 acv 0x22 f 0x0018 eccoffset 2
烧写uboot
memory NANDINFOSWECC driver Targets\Flash-Drivers\nand_onfi_16bit_8bit.bin parameters gpmc 0x6E000000 cs 0 address 0x30000000 bberase 0 onfi 0 bpp 2048 sbpp 64 ppb 64
bpl 1024 l 1 acv 0x22 f 0x0018 swecc 1 eccoffset 40
烧写kernel
memory NANDINFOSWECC driver Targets\Flash-Drivers\nand_onfi_16bit_8bit.bin parameters gpmc 0x6E000000 cs 0 address 0x30000000 bberase 0 onfi 0 bpp 2048 sbpp 64 ppb 64
bpl 1024 l 1 acv 0x22 f 0x0018 swecc 1 eccoffset 40
GPMC_CONFIG1_0 0x00000800 bit12-13是表示是8bit 还是16bit k9f1g08是8bit flash
f为什么是0x0018,因为bit0,为1时代表是16bit flash,为0时,代表8bit flash
出现如下错误提示时,请使用erase all ,在烧写每个软件时,请先擦除,再写入
hwecc 1bit ecc格式
Texas Instruments X-Loader 1.45 (Dec 8 2009 - 22:58:46)
ECC Failed, page 0x00080000
QT编译
http://processors.wiki.ti.com/index.php/Building_Qt
./configure -prefix /home/realtimedsp/workdir/Mike/qt-everywhere-opensource-src-4.6.2/MikeQT -embedded arm –release –opensource –static –fast -no-largefile -platform qws/linux-x86-g++ -xplatform qws/linux-am3517-g++ -depths 16 –no-phonon –no-phonon-backend –no-svg –no-webkit –no-javascript-jit –no-script –no-scripttools –no-declarative -no-mmx -no-3dnow -no-sse -no-sse2 -no-glib -no-cups -no-accessibility –qt-gif -no-openssl -no-gtkstyle -little-endian
-qt-mouse-pc -qt-mouse-linuxtp
-qt-mouse-linuxinput -plugin-mouse-linuxtp -plugin-mouse-pc -fast
到目前为止,xloader,uboot,kernel,rootfs已经成功运行