当前位置:文档之家› MX27_MPK271_Linux_BSP_User_Manual

MX27_MPK271_Linux_BSP_User_Manual

MPK271 Linux BSP V1.1.0

用户使用手册

Feb. 2, 2009

上海辰汉电子科技有限公司

https://www.doczj.com/doc/6118820880.html,

版权声明:

本文档版权归上海辰汉电子科技有限公司所有,并保留一切权利。未经作者同意,任何单位和个人不得将本手册部分或全部,以任何形式用于商业目的。在非商业场合使用本手册是被允许的。Linux是开放源代码的自由软件,并遵循GNU通用公共许可协议GPL。

目录

历史记录 (5)

关于本手册 (5)

读者 (5)

参考资料 (5)

1.Linux BSP介绍 (6)

2.Bootloader的使用 (7)

2.1.Bootloader的烧写 (7)

3.Kernel的烧写 (8)

4.MPK271开发板Linux开发环境 (9)

4.1.必备条件 (9)

4.2.在Linux主机上安装交叉编译环境 (9)

5.编译Bootloader (10)

6.编译Kernel (11)

7.根文件系统 (12)

7.1.使用NFS (12)

7.2.使用YAFFS2 (12)

8.串口驱动 (14)

9.LCD Frame Buffer驱动 (15)

10.Fast Ethernet Controller (FEC) (16)

10.1.FEC介绍 (16)

10.2.FEC的编译 (16)

10.3.FEC的测试 (17)

11.Nand Flash驱动 (18)

12.VPU(Video Processing Unit)驱动 (20)

12.1.VPU驱动介绍 (20)

12.2.VPU库函数 (20)

12.3.VPU驱动测试 (21)

13.MMC/SD/SDIO Host驱动 (23)

13.1.驱动介绍 (23)

13.2.驱动测试 (23)

14.On-Chip RTC驱动 (24)

15.Watchdog驱动 (25)

16.WM9712声卡驱动 (26)

16.1.驱动介绍 (26)

16.2.驱动测试 (26)

17.WM9712触摸屏驱动 (27)

17.1.驱动介绍 (27)

17.2.驱动测试 (27)

https://www.doczj.com/doc/6118820880.html,B驱动 (28)

18.1.驱动介绍 (28)

18.2.OTG Host的测试 (28)

18.3.OTG Gadget的测试 (29)

18.3.1.Ethernet Gadget (30)

18.3.2.Mass storage Gadget (30)

19.CSI/Camera/TVin/V4L2驱动 (31)

19.1.驱动介绍 (31)

19.2.编译驱动 (31)

19.3.驱动的测试 (33)

19.3.1.测试TVin (33)

20.QT GUI (35)

历史记录

版本日期描述

2008

22,

1.0 Sept.

初始版本.

1.1 Feb. 2, 2009 更新至1.1.0 release

关于本手册

本手册详细介绍了辰汉MPK271平台Linux BSP的相关信息,包括对Linux开发环境、内核、驱动、Bootloader等的介绍。若想获得更多的关于MX27 Linux BSP的信息,请参考Freescale随MXC Linux BSP发布的文档MXC Linux Board Support Package Reference Manual, mxc_linux.pdf.

读者

本手册适用于使用辰汉MPK271平台的普通用户,或欲在MPK271平台上做进一步开发的用户。

参考资料

本文档写作过程中参考了以下一些资料。

MXC Linux Board Support Package Reference Manual, mxc_linux.pdf

FSL_ATK_ReleaseNote_1_3.pdf

MX27_MPK271_Linux_BSP_Release_Notes.doc

MX27_MPK271_Linux_BSP_Getting_Started.doc

1. Linux BSP介绍

z提供NAND FLASH的bootloader(nandboot)。nandboot支持NAND Flash启动功能, 不具有网络下载更新功能。

z采用Linux 2.6.19.2内核。

z UART1

z MMC/SD/SDIO

z NAND Boot, MTD

z NFS

z WM9712声卡

z Framebuffer(800x480)

z触摸屏

z USB(Host, Gadget, and OTG)

z On-chip FEC Ethernet

z VPU

z eMMA post-processor

z eMMA pre-processor

z High resolution timer

z DMA

z I2C

z jffs2, yaffs2

z Keypad (6x6 keys, multiple key-press)

z procfs

z RTC

z Watchdog

z Security(SCC, RNGA, HACC, RTIC)

z SSI

z编译器为GNU ARM gcc 4.1.1, glibc 2.4, binutils-2.17, and linux-libc-headers-2.6.17 5。

z调试串口为UART1, 波特率115200, 8个数据位, 1个停止位, 无奇偶校验, 无硬件流控制。

2. Bootloader的使用

2.1. Bootloader的烧写

Bootloader是通过ATK Tool(ADS Tool Kit)来烧写到Nand Flash的起始地址去的。第一次使用开发板之前必须先烧写Bootloader。请参考MX27_MPK271_Linux_BSP_Getting_Started.pdf来烧写Bootloader。

3. Kernel的烧写

Kernel的烧写方法与Bootloader的烧写方法基本相同。具体方法请参考

MX27_MPK271_Linux_BSP_Getting_Started.pdf。

4. MPK271开发板Linux开发环境

4.1. 必备条件

z主机系统必备条件

安装Linux或者Windows操作系统的PC主机一台用于与MDK连接。

z对于Linux主机,需要安装下列应用支持:

Minicom

NFS server software

主机上有网卡能通过直连线或通过HUB与开发机进行数据传输。

z对于Windows主机,可以用Windows下的串口工具如超级终端等。

z局域网内,另外还需要有一台Linux PC做为开发主机,安装好交叉编译环境用来进行编译,该Linux PC可以做为小组多个开发工程师的公用开发主机,大家都通过telnet方式登录,在各自的目录下进行开发。

z目标系统必备条件

z MPK271开发板及电源

z串口线

z网线

4.2. 在Linux主机上安装交叉编译环境

1. 以root用户登录。如果目录/opt/freescale/usr/local尚未存在,则创建改目录,并进入改目录:

%cd /opt/freescale/usr/local

2. 将安装包中的文件mx27-mpk271-toolchain.tgz copy到目录/opt/freescale/usr/local:

3. 解压缩Toolchain:

%tar -xzvf mx27-mpk271-toolchain.tgz

解压完毕之后Toolchain会被安装到目录/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin中。

4. 设置路径:

%export PATH=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin:$PATH

5. 编译Bootloader

1. 进入你的工作目录(例如~/working)然后copy安装包中的Bootloader源文件mx27-mdk-nandboot.tgz 到你的工作目录中。解压缩改源文件:

%tar -zxvf mx27-mpk271-nandboot.tgz

2. 编译Bootloader

%cd nandboot

% make PLATFORM=IMX27MPK271 CROSS_COMPILE=arm-926ejs-linux-

编译好的Bootloader二进制代码为IMX27MPK271_nb_iplspl.bin。改文件在nandboot/bin/目录下,可直接被ATK Tool烧写到Nand Flash中。此编译过程同时会产生工具crcgen,改工具今后会被使用,用来产生可以被烧写到Nand Flash中去的kernel image。改工具也在nandboot/bin/中。

编译

6. Kernel

将安装包中的源文件到你的工作目录中(例如)并Kernel mx27-mpk271-kernel-2.6.19.tgz copy~/working

解压,然后进入解压后的kernel源文件根目录。

第一次编译之前需要导入默认:

1. kernel config file

%make ARCH=arm CROSS_COMPILE=arm-926ejs-linux- imx27mpk271_defconfig

kernel

3. 输入以下命令来编译:

%make ARCH=arm CROSS_COMPILE=arm-926ejs-linux- zImage

crcgen kernel image

4. 使用工具来校验上一步编译好的:

%mkdir ~/working/nandboot/image

%cp arch/arm/boot/zImage ~/working/nandboot/image/Image

%cd ~/working/nandboot/bin

%./crcgen

CRC.ATK Tool 经校验的被放在目录下现在你可以用kernel image Image_nb_crc~/working/nandboot/bin

把他烧写到中去。

Nand Flash

可以使用以下命令来根据需要对进行配置

kernel:

%make ARCH=arm CROSS_COMPILE=arm-926ejs-linux- menuconfig

输入该命令后的界面如下图所示。

7. 根文件系统

可以使用NFS和YAFFS2来挂载根文件系统。

7.1. 使用NFS

用NFS来挂载根文件系统需要Kernel对NFS文件系统的支持。MPK271默认配置的Kernel已经对NFS做了支持。

/your_home/working/rootfs *(rw,sync,no_root_squash)

这里目录/your_home/working/ 应该包含解压缩后的rootdisk文件。然后运行以下命令:

%exportfs -rv

重新启动MDK将会在HyperTerminal中看到如下信息:

Linux 2.6 Freescale MXC processor

Choose an option from below:

1. Load kernel to RAM and then boot from [0x80008000]

2. Change kernel loading address [0x80008000]

3. Enter command line option for kernel

选择3.

输入以下命令行并回车(注意,请修改该命令行以输入与你网络环境相匹配的IP地址及在你的Linux PC上你的rootdisk所在的目录):

%noinitrd console=ttymxc0 root=/dev/nfsroot rootfstype=nfsroot nfsroot=:/your_home/working/rootfs rw ip=dhcp

在HyperTerminal中又将会看到如下信息:

Choose an option from below:

1. Load kernel to RAM and then boot from [0x80008000]

2. Change kernel loading address [0x80008000]

3. Enter command line option for kernel

选择1启动kernel,启动过程中系统会用NFS来挂载文件系统。如果在此遇到问题,请向有NFS经验的人员(例如网络管理人员)咨询。

7.2. 使用YAFFS2

本节介绍如何烧写YAFFS2文件系统到MPK271 Nand Flash中。当YAFFS2被烧写到NAND Flash中去后MPK271就可以不需要连接到网络(NFS Server)也可以启动了。

注意:请确保在本节之前7.1节(使用NFS)已经成功完成了。

首先使用NFS启动MDK。

1. 在MPK271板上运行以下命令:

%flash_eraseall /dev/mtd/2

%mkdir /mnt/yaffs

%mount -t yaffs2 /dev/mtdblock/2 /mnt/yaffs/

2. 在Linux PC上运行如下命令,其中$ROOTFS_DIR是Linux PC上挂载到MPK271上的rootfs所在的目录:

%mkdir $ROOTFS_DIR/download

%cd $ROOTFS_DIR/download

%cp ~/mx27-mpk271-rootfs.tgz .

3. 在MPK271上运行以下命令:

%cd /download

%tar -zxvf mx27-mpk271-rootfs.tgz -C /mnt/yaffs/

%cd /mnt/yaffs/

%mv rootfs/* ./

%rmdir rootfs

4. Reset MPK271开发板,等待几秒钟让kernel以默认command line启动。此时kernel会以YAFFS2来挂载根文件系统。

8. 串口驱动

MDK开发板提供的Linux驱动程序包括串口、10/100M网卡、SD/MMC卡、NAND FLASH、MC13783声卡、LCD、触摸屏、USB OTG、IDE等多种驱动。驱动部分,本文档作为mxc_linux.pdf的补充,不同之处以本文档为准。

本章介绍串口驱动。详细的串口驱动介绍请参考文档mx_linux.pdf的第六章。驱动源代码:drivers/serial/mxc_uart.c

drivers/serial/mxc_uart_reg.h

内核配置选项:

1. CONFIG_SERIAL_MXC—This configuration option is used for the MXC UART driver for the MXC UART ports. In menuconfig,this option is found under Characters→Serial. By default, this option is Y for all architectures.

2. CONFIG_SERIAL_MXC_CONSOLE—This configuration option chooses the MXC Internal UART to bring up the system console. This option is dependent on the “CONFIG_SERIAL_MXC” option. In menuconfig,this option is found under Characters→Serial. By default, this option is N for all architectures.

开发板的串口做调试用,对应的设备名是/dev/ttymxc0。串口的波特率是115200, 8个数据为,1个停止位, 无奇偶校验, 无硬件流控。

9. LCD Frame Buffer驱动

驱动的详细介绍可参考的第八章。驱动对应的设备是。Frame Buffer Frame Buffer

mxc_linux.pdf/dev/fb0开发板提供显示屏,对应的驱动源代码是MPK271LTP700WV-F01 WVGA 800x480 RGB565 TFT LCD: drivers/video/mxc/mx2fb.c

drivers/video/mxc/mxcfb_mode.c

内核配置选项为

:

Device Drivers->Graphics support->MXC Framebuffer support。需要选择SAMSUNG LTP700WV-F01 ,如下图所示

WVGA Panel:

10. Fast Ethernet Controller (FEC)

10.1. FEC介绍

片内集成有快速以太网控制器,片外不再需要网卡芯片,只需要连接一个收发器即可。驱MX27FEC

动的详细介绍请参考mxc_linux.pdf FEC100Mbps:

的第三十章。性能能达到全双工。驱动源代码drivers/net/fec.c

由于开发板上同时有网卡和,具有双网卡,因此系统默认将的驱动编译进内核,CS8900FEC CS8900

对应的设备名是eth0FEC fec.ko insmod

;默认编译为模块,即,待系统启动完成后可选择进内核,对应的设备名是eth1。

10.2. FEC的编译

进入内核源代码目录下,键入,然后找到以下模块Networking support->Ethernet Linux make menuconfig

(10 or 100Mbit)->FEC ethernet controller,如图所示:

注意:如果希望通过挂载根文件系统,请去掉选项并选中为编译进内核。如果FEC NFS CS89x0FEC

不需要用FEC NFS[M]make modules fec.ko 来挂载根文件系统,可选择来编译成模块。键入编译得到。

10.3. FEC的测试

测试前请确认FEC接口已经连上网线。FEC驱动默认编译在内核中,按照下列步骤进行测试:mx27#ifconfig eth0 xx.xx.xx.xx

Ping 测试:

mx27#ping xx.xx.xx.xx

ftp测试:

mx27#ftpget xx.xx.xx.xx a.file a.file

如能顺利下载到文件,即通过测试。

11. Nand Flash驱动

MX27片内集成了NAND Flash控制器(NFC)。开发板带有一片256MB的三星NAND Flash。NAND Flash MTD驱动的源代码:

drivers/mtd/nand/mxc_nd.c

内核配置选项:

CONFIG_MTD_NAND_MXC Device Drivers → Memory Technology Devices (MTD) → NAND Flash Device Drivers → MXC NAND Support。

开发板启动后会在/proc/mtd文件中显示开发板的NAND Flash的分区情况。

查看NAND flash的分区:

mx27# cat /proc/mtd

dev: size erasesize name

mtd0: 00020000 00020000 "IPL-SPL"

mtd1: 00400000 00020000 "nand.kernel"

mtd2: 0a000000 00020000 "nand.rootfs"

mtd3: 00800000 00020000 "Flb"

mtd4: 053e0000 00020000 "Flc"

挂载NAND flash的分区:

mx27# mount -t yaffs2 /dev/mtdblock/2 /mnt/floppy/

mx27# mount

/dev/root on / type yaffs2 (rw)

proc on /proc type proc (rw)

sys on /sys type sysfs (rw)

tmpfs on /dev type tmpfs (rw)

devpts on /dev/pts type devpts (rw)

rwfs on /mnt/rwfs type tmpfs (rw)

shm on /dev/shm type tmpfs (rw)

/dev/mtdblock/3 on /mnt/flb type yaffs (rw)

/dev/mtdblock/4 on /mnt/flc type yaffs2 (rw)

/dev/mtdblock/2 on /mnt/floppy type yaffs2 (rw)

此时即可在NAND flash的分区上进行一些基本的操作:

mx27# cd /mnt/floppy/

mx27# ll

-rw-r--r-- 1 root root 649044 Jan 1 00:03 Cr

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 bin

drwxr-xr-x 1 root root 2048 Jul 27 2007 dev

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 dir

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 etc

-rw-r--r-- 1 root root 320044 Jan 1 00:09 file.wav

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 home

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 lib

lrwxrwxrwx 1 2424 2409 11 Jan 1 00:06 linuxrc -> bin/busybox

drw-rw-rw- 1 root root 2048 Jan 1 00:24 lost+found

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 mnt

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 opt

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 proc

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 root

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 sbin

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 sys

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 tmp

drwxr-x--- 1 root root 2048 Sep 13 2007 unit_tests

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 usr

drwxr-x--- 1 2424 2409 2048 Sep 13 2007 var

mx27# df

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/mtdblock2 163840 118140 45700 72% /

tmpfs 63360 236 63124 0% /dev

rwfs 512 0 512 0% /mnt/rwfs

shm 63360 0 63360 0% /dev/shm /dev/mtdblock/3 8192 2288 5904 28% /mnt/flb

/dev/mtdblock/4 85888 2060 83828 2% /mnt/flc

/dev/mtdblock/2 163840 118140 45700 72% /mnt/floppy 使用如下命令卸载

mx27# cd /

mx27# umount /mnt/floppy/

mx27# mount

/dev/root on / type yaffs2 (rw)

proc on /proc type proc (rw)

sys on /sys type sysfs (rw)

tmpfs on /dev type tmpfs (rw)

devpts on /dev/pts type devpts (rw)

rwfs on /mnt/rwfs type tmpfs (rw)

shm on /dev/shm type tmpfs (rw)

/dev/mtdblock/3 on /mnt/flb type yaffs (rw)

/dev/mtdblock/4 on /mnt/flc type yaffs2 (rw)

12. VPU(Video Processing Unit)驱动

12.1. VPU驱动介绍

详细介绍请参考mxc_linux.pdf的第十三章。驱动源代码:

drivers/mxc/vpu/mxc_vpu.c

drivers/mxc/vpu/mxc_vpu.h

内核配置选项:

CONFIG_MXC_VPU MXC support drivers ->H.264 VPU Codec support

VPU lib的编程接口请参考文档mxc_linux.pdf的13.5,详细的接口函数使用方法请参考测试程序参考代码(参考代码在misc/test/mxc_vpu_test目录下面)。

12.2. VPU库函数

VPU库函数是用户程序与VPU驱动的接口,其代码位于misc/lib/vpu/目录下, 主要包含如下函数: RetCode vpu_Init(PhysicalAddress workBuf);

RetCode vpu_GetVersionInfo();

RetCode vpu_EncOpen(EncHandle *, EncOpenParam *);

RetCode vpu_EncClose(EncHandle);

RetCode vpu_EncGetInitialInfo(EncHandle, EncInitialInfo *);

RetCode vpu_EncRegisterFrameBuffer(EncHandle handle, FrameBuffer * bufArray, int num, int

stride);

RetCode vpu_EncGetBitstreamBuffer(EncHandle handle, PhysicalAddress * prdPrt, PhysicalAddress * pwrPtr, Uint32 * size);

RetCode vpu_EncUpdateBitstreamBuffer(EncHandle handle, Uint32 size);

RetCode vpu_EncStartOneFrame(EncHandle handle, EncParam * param);

RetCode vpu_EncGetOutputInfo(EncHandle handle, EncOutputInfo * info);

RetCode vpu_EncGiveCommand(EncHandle handle, CodecCommand cmd, void *parameter);

RetCode vpu_DecOpen(DecHandle *, DecOpenParam *);

RetCode vpu_DecClose(DecHandle);

RetCode vpu_DecGetBitstreamBuffer(DecHandle handle, PhysicalAddress *paRdPtr,

PhysicalAddress * paWrPtr, Uint32 * size);

RetCode vpu_DecUpdateBitstreamBuffer(DecHandle handle, Uint32 size);

RetCode vpu_DecSetEscSeqInit(DecHandle handle, int escape);

RetCode vpu_DecGetInitialInfo(DecHandle handle, DecInitialInfo * info);

RetCode vpu_DecRegisterFrameBuffer(DecHandle handle,

FrameBuffer * bufArray, int num, int stride);

RetCode vpu_DecStartOneFrame(DecHandle handle, DecParam * param);

RetCode vpu_DecGetOutputInfo(DecHandle handle, DecOutputInfo * info);

RetCode vpu_DecBitBufferFlush(DecHandle handle);

RetCode vpu_DecGiveCommand(DecHandle handle, CodecCommand cmd, void *parameter);

int IOSystemInit(void *callback);

int IOSystemShutdown(void);

int IOGetPhyMem(vpu_mem_desc * buff);

int IOFreePhyMem(vpu_mem_desc * buff);

int IOGetVirtMem(vpu_mem_desc * buff);

int IOFreeVirtMem(vpu_mem_desc * buff);

int IOWaitForInt(int timeout_in_ms);

相关主题
文本预览
相关文档 最新文档