- 论坛徽章:
- 0
|
JZ4740开发笔记
开发环境:ubuntu 9.04
目标板:JZ4740-pavo
目标系统:linux-2.6.24.3
一、 需要安装以下工具:
a) 预装必要的软件
1、sudo apt-get install patch
2、sudo apt-get install libncurses5-dev
3、sudo apt-get install sharutils
4、sudo apt-get install gawk
b) 需要准备的文件
二、具体步骤:
1.安装工具链
首先,创建一工作目录,并把工具链包解压到该目录下,比如:
$ mkdir –p /opt
$ cd /opt
$ tar zxvfmipseltools-gcc412-lnx26.tar.gz
其次,更新PATH 环境变量(在/etc/profile 中增加则所有用户可用,在~/.bashrc
中增加则只有当前用户可用):
$ export PATH=/opt/mipseltools-gcc412-lnx26/bin:$PATH
按照上面步骤建立好交叉编译环境后,可以编译简单的helloworld.c 测试一下:
$ mipsel-linux-gcc –o helloworld helloworld.c
如果编译通过,说明刚刚安装的交叉编译工具链可以工作了。
2. 安装编译uboot
Download the u-boot tarball u-boot-1.1.6.tar.bz2 and unpack it:
$ tar jxzf u-boot-1.1.6.tar.bz2
Download the latest u-boot patch and patch it to the u-boot tree:
$ cd u-boot-1.1.6
$ gzip -cd ../u-boot-1.1.6-jz-yyyymmdd.patch.gz | patch -p1
Make defconfig of the JZSOC based platform, eg:
$ make pavo_nand_config (NAND boot for JZ4740 PAVO board)
Build the u-boot:
$ make
Then burn the u-boot-nand.bin (for NAND flash) to the target board by using JDI
or USB boot tool.
将/u-boot-1.1.6/tools下的makeimage 拷贝到/opt/mipseltools-gcc412-lnx26/bin 以
便在编译kernel 时直接生成uImage 映像
3. 安装编译内核映像
Download the linux kernel tarball linux-2.6.24.3.tar.bz2 and unpack it:
$ tar jxzf linux-2.6.24.3.tar.bz2
Download the latest kernel patch and patch it to the kernel tree:
$ cd linux-2.6.24.3
$ gzip -cd ../linux-2.6.24.3-jz-yyyymmdd.patch.gz | patch -p1
Make defconfig of the JZSOC based platform, eg:
$ make pavo_defconfig (JZ4740 based PAVO board)
Build the kernel: $ make menuconfig
Device Drivers--->Graphics support--->Support for frame buffer devices --->JZ4740 Smart LCD controller support--->SPFD5420A Smart LCD panel
注意:uImage在目录/tmp/linux-2.6.24.3/arch/mips/boot下
这一步在ubuntu 下可能会报错,在新立得中安装libncurse5-dev(用于制作终端下
的菜单交互界面)即可
$ make uImage
or
# make zImage
or
# make modules
4安装编译文件系统
1、 拷贝rootfs-yyyyddmm.tar.gz到tmp目录
2、 解压rootfs-yyyyddmm.tar.gz (sudo tar zxvf /tmp/rootfs-yyyyddmm.tar.gz)
3、 更改权限(sudo chmod –R 777 rootfs)
4、 拷贝mkyaffs2image 到/opt/mipseltools-gcc-yyyyddmm/bin下
(sudo cp /linux-2.6.24.3/fs/yaffs/utils/mkyaffsimage /opt/misseltools-gcc-yyyyddmm/bin )
5、cd rootfs
6、mkyaffs2image
(在 /tmp/linux-2.6.24.3/fs/yaffs2/utils目录下直接make就生成了mkyaffs2image文件)
7、mkyaffs2image 1 root26 root26.yaffs2
(以上是4.3寸频的)
编译7寸频的步骤和4.3寸的一样只需Linux 下修改液晶驱动即可,具体操作步骤如下:
1.修改uboot(/tmp/u-boot-1.1.6/cpu/mips/jz_lcd.c)
#if defined(CONFIG_JZLCD_SAMSUNG_LTP400WQF02_18BIT)
MODE_TFT_GEN | MODE_TFT_18BIT | HSYNC_N | VSYNC_N,
/* MODE_TFT_18BIT: JZ4740@ version */
480, 272, 32, 60, 41, 10, 2, 2, 2, 2
#endif
复制粘贴以上代码修改参数
#if defined(CONFIG_JZLCD_HANNSTAR_HSD070_18BIT)
MODE_TFT_GEN | MODE_TFT_18BIT | HSYNC_N | VSYNC_N,
800, 480, 16, 60, 48, 3, 40, 40, 29, 3
#endif
#if defined(CONFIG_JZLCD_SAMSUNG_LTP400WQF02_18BIT)
480, 272, LCD_BPP,
#endif
复制粘贴以上代码修改参数
#if defined(CONFIG_JZLCD_HANNSTAR_HSD070_18BIT)
800, 480, LCD_BPP,
#endif
修改后编译下载,发现字比较大,屏幕还晃得厉害,经检查还有一个地方没有修改
修改(/home/ampere/u-boot-1.1.6/include/configs/pavo.h)
#define CONFIG_LCD /* LCD support */
//#define CONFIG_JZLCD_SAMSUNG_LTP400WQF02_18BIT
#define CONFIG_JZLCD_HANNSTAR_HSD070_18BIT
#if defined(CONFIG_JZLCD_HANNSTAR_HSD070_18BIT)
#define LCD_BPP 4 /* 4:16bpp 5: 18,24,32 bits per pixel */
#else
#define LCD_BPP 5 /* 5: 18,24,32 bits per pixel */
#endif
#define CFG_WHITE_ON_BLACK
#define CONFIG_LCD_LOGO
修改后重新make 后字体大小正常,但启动过程中屏幕会向右漂移,这应该是帧速率太高的缘故,帧速率降到55 以下就没有问题。暂时停止uboot 的调试,先用nandboot 装载系统,进入正题。
使用nandboot 的几个注意事项:
1、内核的启动参数在nandboot-1.0\include\jz4740_board.h 中修改
#define CFG_CMDLINE "。。。"
修改这一句可以修改成nfsroot 或nand 启动参数分别是
"mem=64M console=ttyS0,57600n8 ip=192.168.0.80 nfsroot=192.168.0.50:/rootfs/root26 rw"
"mem=64M console=ttyS0,57600n8 ip=off root=/dev/mtdblock2 rw"
2、默认内核烧写的起始地址是256KB,大小是2MB,可以自行修改
3、内核的类型是zImage 而不是uImage
经测试可以正常装载内核映像。
2.修改linux(/tmp/linux-2.6.24.3/drivers/video/jzlcd.c)
#if defined(CONFIG_JZLCD_SAMSUNG_LTP400WQF02)
/* MODE_TFT_18BIT: JZ4740@ version */
MODE_TFT_GEN | MODE_TFT_18BIT | HSYNC_N | VSYNC_N,
480, 272, 32, 60, 41, 10, 2, 2, 2, 2
#endif
#if defined(CONFIG_JZLCD_HANNSTAR_HSD070)
MODE_TFT_GEN | MODE_TFT_18BIT | HSYNC_N | VSYNC_N,
800, 480, 16, 60, 48, 3, 40, 40, 29, 3
#endif
修改(/home/ampere/linux-2.6.24.3/drivers/video/Kconfig)
config JZLCD_SAMSUNG_LTP400WQF02
bool “xxxxxx ”
config JZLCD_HANNSTAR_HSD070
bool “HANNSTAR HSD070 TFT panel (800x480) ”
重新make menuconfig
Device Driver => Graphics support => Support for framebuffer devices => LCD panel 下面多个液晶选项中有HANNSTAR HSD070 ,选中后退出,保存修改
make uImage 即可
make 即可,内核启动后也发现有屏幕漂移的现象,播放MPlayer视频也可以,但也是漂移,看起来不像内存泄漏,后来经过反复测试,发现是帧速率的问题,在 16 位颜色时,帧速率到50 还可以稳定工作,超过55 时就会漂移;在32 位颜色时,帧速率到25 还可以稳定工作,超过30 就会发生漂移。这应该适合开发板上数据线太长有关系,最终产品缩短数据线应该就没有问题了。建议使用16 位颜色,不要使用超过16 位的颜色。
操作完上面的步骤后拷贝uImage(/tmp/linux-2.6.24.3/arch/mips/boot),u-boot- nand.bin(/tmp/u-boot-1.1.6),root26.yaffs2(/tmp/rootfs)三个文件到host,准备烧录工作。至于这三个文件的作用,请参考嵌入式开发流程图
在host上建立一个文件夹如:jztools文件目录如下图:
注意,上图中有XX43,XX70分别表示4.3寸频,和7寸频,文件的名称可自行修改
使用USB BOOT烧录整个linux系统
1.修改默认配置文件usbboot.cfg 如下
;------------------------------------------------
; USB boot configuration file for Jz4740 board
;------------------------------------------------
[CPU]
CPUTYPE 40 ;40=jz4740,50=jz4750
[SDRAM]
SDRAMSIZE 64 ;sdram size in M byte
[NAND]
BUSWIDTH 8 ;The width of the NAND flash chip in bits (8|16|32)
ROWCYCLES 3 ;The row address cycles (2|3)
PAGESIZE 2048 ;The page size of the NAND chip in bytes
PAGEPERBLOCK 128 ;The page number per block
FORCEERASE 1 ;The force to erase flag (0|1)
PAGENUMBER 524288 ;The page number of the entire nand chip,1GB
OOBSIZE 64 ;oob size in byte
ECCPOS 6 ;ecc position usually 6, 28 for yaffs2
BADBLACKPOS 0 ;bad black ID position
BADBLACKPAGE 127 ;bad black ID page
[END]
2.建立另一个配置文件usbbootyaffs2.cfg 如下
;------------------------------------------------
; USB boot configuration file for Jz4740 board
;------------------------------------------------
[CPU]
CPUTYPE 40 ;40=jz4740,50=jz4750
[SDRAM]
SDRAMSIZE 64 ;sdram size in M byte
[NAND]
BUSWIDTH 8 ;The width of the NAND flash chip in bits (8|16|32)
ROWCYCLES 3 ;The row address cycles (2|3)
PAGESIZE 2048 ;The page size of the NAND chip in bytes
PAGEPERBLOCK 128 ;The page number per block
FORCEERASE 1 ;The force to erase flag (0|1)
PAGENUMBER 524288 ;The page number of the entire nand chip,1GB
OOBSIZE 64 ;oob size in byte
ECCPOS 28 ;ecc position usually 6, 28 for yaffs2 //只需将ECCPOS后的值改成28
BADBLACKPOS 0 ;bad black ID position
BADBLACKPAGE 127 ;bad black ID page
[END]
3.启动usbboot,让开发板进入内核烧写状态
4.list
5.boot 0
6.nerase 0 4096 0 0
7.nprog 0 u-boot-nand.bin 0 0 –n
8.nprog 2048 uImage 0 0 -n
9.fconfig usbbootyaffs2.cfg 0
10.nprog 4096 root26.yaffs2 0 0 -o
USBBOOT命令说明:
1. list列出连接的设备数,至少应为1
2. boot (1)
a) 1:接入主机的设备的编号
b) 注意:该命令会先判断指定的设备是否工作在第一阶段,不会对同一设备进行两次boot操作
3. nerase(1)(2)(3)(4)
a) 1:要擦除的起始块号;
b) 2:要擦除的数据长度,以块为单位;
c) 3:接入主机的设备的编号;
d) 4:设备上Flash芯片的编号;
注意:起始块号的长度不应该超过Falsh芯片块的总大小
4.nporg(1)(2)(3)(4)(5)
a) 1:镜像烧录位置的起始页号;
b) 2:镜像文件的路径;
c) 3:接入主机设备的编号;
d) 4:设备上Flash芯片的编号;
e) 5:镜像类型:-n 为镜像文件中不包含OOB信息
5.fconfig (1)(2)
a) 1:配置文件名和路径;
b) 2:接入主机的设备的编号;
USBBOOT编号规则:无论连接多少个设备编号总是从0开始,如只有一个设备编号必然是0,若有多个设备,某个设备连接的编号根据该设备连接的USB Hub接口的优先级来确定。主机上USB Hub有固定的优先级,优先级最高的获得编号0,依此内推。
测 试
测试linux设备驱动
1. 测试LCD显示:
配置Linux时选择好目标板LCD屏的型号,在启动Linux时就应该能看到LCD屏幕有图案输出。如果没有,请检查LCD屏的硬件连接。
2. 测试音频
a) 播放和录音:
Mp3播放:# madplay test.mp3
b) 录音和播放录音
# vrec –s –s 48000 –b 16 sample1
# vplay –S –s 48000 –b 16 sample1
3. 测试jffs2和yaffs2文件系统
查看MTD分区表信息:cat /proc/mtd
格式化MTD分区
# flash_eraseall –j /dev/mtd3 JFFS2 文件系统格式化
# flash_eraseall /dev/mtd4 YAFFS2 文件系统格式化
挂载和测试文件系统:
# mount –t jffs2 /dev/mtdblock3 /mnt/mtdblock3 JFFS2 分区挂载
# mount –t yaffs2 /dev/mtdblock3 /mnt/mtdblock4 YAFFS2 分区挂载
# cp test /mnt/mtdblock4
# umount /mnt/mtdblock4
如果正常,说明文件系统已经工作。
4. 测试MMC/SD卡
在Linux正常启动后,插入MMC或SD卡到SD卡座,Linux就能自动探测到卡的插入并读出分区表信息,这时就可以挂载和操作SD卡了:
# mount –t vfat /dev/mmcblk0p1 /mnt/mmc
# ls /mnt/m c
5. 测试触摸屏
启动Linux后,运行下面命令校正触摸屏:
# ts_calibrate
运行下面命令测试触摸屏:
# ts_test
6. 测试USB Host
插入USB设备(如U盘)到USB Host端口,Linux应能探测到设备的插入,这时可以挂载和操作U盘了:
# mount –t vfat /dev/sda1 /mnt/usb
# ls /mnt/usb
7. 测试USB Device
首先,以模块方式编译生成USB Device驱动:jz4740_udc.ko和g_file_storage.ko;然后按照下面方法加载驱动:
# insmod jz4740_udc.ko
# insmod g_file_storage.ko file=/dev/mtdblock5,/dev/mmcblk0
这时我们挂载了两个U盘分区,一个是基于NAND Flash的分区mtdblock5,另一个是基于SD卡的分区。现在用USB电缆连接PC和目标板的USB Device端口,PC应该能识别到设备的插入并识别为U盘设备。
8. 测试电源管理
a) 测试系统睡眠、唤醒和关机
运行下面命令,系统将进入睡眠状态,在按power键之后唤醒。
# echo 1 > /proc/sys/pm/suspend
运行下面命令,系统将关机,在按power键之后重启。
# echo 1 > /proc/sys/pm/hibernate
b) 测试动态变频管理
在编译内核时,在CPU Frequency scaling选项中选择userspace为默认的governor。这样在目标板启动之后可以通过sys文件系统接口来控制cpufreq驱动。在目标板启动之后,如果没有mount sys文件系统,那么需要执行
# mount –t sysfs sysfs /sys
如果编译内核时选择的默认governor不是userspace,而是performance,那么需要执行命令把governor改为userspace:
# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
然后通过下面命令可以看当前系统频率(单位:KHz):
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
另外,更详细的系统频率可由下面命令获得,该命令与 cpufreq 无关:
# cat /proc/jz/cgm
CPPCR : 0x1b000520
CPCCR : 0x406c4442
PLL : ON
m:n:o : 56:2:1
C:H:M:P : 3:6:6:6
PLL Freq : 336.00 MHz
CCLK : 112.00 MHz
HCLK : 56.00 MHz
MCLK : 56.00 MHz
PCLK : 56.00 MHz
LCDCLK : 25.84 MHz
PIXCLK : 9081.08 KHz
I2SCLK : 12.00 MHz
USBCLK : 12.00 MHz
MSCCLK : 24.0 MHz
EXTALCLK : 12.00 MHz
RTCCLK : 0.03 MHz
看当前可设置的最低系统频率:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
看当前可设置的最高系统频率:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
设置当前系统频率(频率单位是KHz,以设为112MHz为例):
# echo 112000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
在编译内核时,在CPU Frequency scaling选项中勾选CPU frequency translation statistics details,可以使用三个命令看变频记录。首先,通过下面命令可获得变频的历史记录表:
# cat /sys/devices/system/cpu/cpu0/cpufreq/stats/trans_table
From : To
: 42000 56000 84000 112000 168000 336000
42000: 0 0 0 0 0 3
56000: 0 0 0 0 0 0
84000: 0 0 0 0 0 0
112000: 0 0 0 0 0 0
168000: 0 0 0 0 0 0
336000: 3 0 0 0 0 0
通过下面命令便可获得系统在各个频率点的工作时间,单位时间和jiffies的单位相同,一般是10ms (由编译内核时的 Kernel type 中的 Timer frequency 决定)。如下例中系统在 42000KHz 的 工作时间是 23676*10ms.
# cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
42000 23676
5600 0
84000 0
112000 0
168000 0
336000 61957
下面命令可得到总的变频次数
# cat /sys/devices/system/cpu/cpu0/cpufreq/stats/total_trans
测试视频测试:
mplayer40 –vf scale=480:320 /mnt/usb/*.rmvb 4.3寸
mplayer40 –vf scale=800:480 /mnt/usb/*.rmvb 7寸
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84258/showart_1985277.html |
|