旧部复活--QQ2440
近日从论坛二手区,入手一块QQ2440板子,花了100元,通过X宝交易的,卖家还电邮了全套原厂资料包。
照理,资料全了,板子也没问题,应该容易搞起的。但经过几天折腾,不是这么容易的事情。于是把这几天折腾板子的经验写出来,与苦手一起分享一下。
拿到板子主要问题是:
1. 原厂已经不做QQ2440的技术支持了。
照理,资料全了,板子也没问题,应该容易搞起的。但经过几天折腾,不是这么容易的事情。于是把这几天折腾板子的经验写出来,与苦手一起分享一下。
拿到板子主要问题是:
1. 原厂已经不做QQ2440的技术支持了。
2. 论坛中的资料缺乏整理。
3. 论坛中的附件链接几乎都失效了。
4. 软件版本与QQ2440的不一致性。
-----------------------------------------------
-----------------------------------------------
好吧,毕竟是八年前的东西了,现在随便搞个路由器,性能都比这板子强。 这板子能干嘛呢?我想无非二类功能。
1. 学习用,嵌入系统发展这么多年了,但还是一个套路,开发方法一点没有新意,烧板子烧十多年,烧法居然还是一样的。所以拿来学习很有用,毕竟便宜嘛 .
2. 定制小应用,其实只有想不到,没有做不到,QQ2440去做智能小车,网络收音机,iTunes Server, 音桥,网络视频头,网络家具遥控。。。。。真的很多。
所以,我想分几篇,把这个QQ2440的事情讲完整。手上有一样的QQ2440板子的同学,可以考虑要不要翻出来再玩一下。
所以,我想分几篇,把这个QQ2440的事情讲完整。手上有一样的QQ2440板子的同学,可以考虑要不要翻出来再玩一下。
我拿到手的是一块QQ2440裸板,四份原厂资料电子版(手册,各类软件及驱动,烧写镜像,编译用原代码)。
除非你是资深开发人员,不然拿这些电子版的东西,只会一头雾水,不知从何下手了。
事实上,我们在开始折腾QQ2440前,最好能准备好以下种工具:
1. j-link:这是烧写工具的硬件。taobao上几十块钱能买到。要记得几件事情:
事实上,我们在开始折腾QQ2440前,最好能准备好以下种工具:
1. j-link:这是烧写工具的硬件。taobao上几十块钱能买到。要记得几件事情:
a. j-link目前流行的是v8版本,当然v7也是能用的。
b. 跟老板要j-link的烧写软件,省得你自己去找合适的版本了。(SEGGER J-Flash ARM V4.081)
c. QQ2440上的JTAG接口是2.0mm的小排插,j-link上用的是2.54mm的排插,所以要么买根转换线,要么买个转换小板。
d. j-link其实是很成熟的东西了,没必要在这上面花太多钱,反正几十块至几百元的,都是山寨货。
e. 烧录不稳定?这真的不怪j-link, 只要找对了CPU、nor、nand的配置文件。烧个supervivi, uboot真心不难。
在本贴的附件中,提供了QQ2440刷写norflash的配置文件(qq2440_norflash.rar), 在segger j-flash ARM中打开就行了。
2. 串口线:串口是QQ2440最基本的通讯方式,所以你必须有一根可以与PC通讯的串口线。
2. 串口线:串口是QQ2440最基本的通讯方式,所以你必须有一根可以与PC通讯的串口线。
a. 可以买一根usb-RS232的线,如果你的PC机上没有现成串口的话。
b. 自己做一个二头母的RS232线,中间的2.3.5线直连。
c. 如果懒得做,你可以用usb-rs232线,再配一个母母的转换头。
(这可能是当初的硬件设计问题,通常在串口设计中,主机端用公头,设备端用母头,主机--主机通讯时用交叉线,主机与设备通讯用直连线,很容易分别,好在这种混乱的设计在6410/210中纠正过来了)
3. 电源: 12V直流
3. 电源: 12V直流
这个没什么好说的,12V, 电流1A或者更大。(有人说,电流增到2A, CPU就超频到800Mhz, 好吧,这是冷笑话)
4. usb驱动
4. usb驱动
a. 只有板上有supervivi(或者称为bios,其实正确说法是bootloader)时才会有usb设备发现。
b. 有些版本的supervivi不带usb驱动,即使装了,也不能发现设备。
c. nor, nand需要分别装supervivi, 才能在各自在启动模式中发现设备。
d. PC端驱动一:用附件中的win7 usb driver, 配合附件中的supervivi-usb-transfer-tools工具,可在win 7, xp中进行操作。
e. PC端驱动二:用附件中的usb驱动,配合DNW软件,可在XP中进行操作。
f. 上述二种的驱动必须与对应该工具配合,不能互换。
5. DNW
5. DNW
a. 好象有二个版本,0.4x的,还有个0.50a的,用用都一样的,没什么明显区别。
b. usb设置中, 有人说一定要设置到30000000, 其实没太讲究,这是板上内存暂存地址,30000000或者以上都可以,32000000也没问题。
6. supervivi
6. supervivi
superviv是三星自己写的一个bootloader, 作为一种bootloader来说,它做得已经很完整了,基本功能都全了。
有人说supervivi提供的源码是不支持usb操作方式的。其实这是个误解。superviv与usb设备是分离的二个程序,
分别编译好后,合起来,就是我们用到的所谓带usb功能的supervivi.
论坛上有很多种supervivi提供,我附件中提供二个可以在qq2440中用的,一个是早期与qq2440配的,另一个是1026版中的128M版本(64M版本不带usb)。
nor启动方式时,二者区别不大,nand方式时按板上按钮,或者按终端空格。另外就是二者的nand默认分区块大小不一样。
好了,东西都准备好了。
好了,东西都准备好了。
在开始linux安装之前,我们已经知道一个简单的事情。就是linux需要烧入板子里面三段程序,分别是:
1. bootloader--负责板子初始化,并提供启动入口地址 (如supervivi, uboot)
2. kernel --启动linux核心,分配系统资源 (如zImage, uImage)
3. rootfs -- linux中的各种文件 (如rootfs) 在qq2440这板子上,nor明显是不够装linux的,所以我们会把linux放到nand上去。
事先我们会对nand进行分区,然后把上述三个文件,烧写到对应的三个分区上去。理论上就是这么简单。可实际上有点点麻烦。
如果你手头刚好有QQ2440的全套linux镜像文件,你可以按qq2440用户手册上办法,一步步烧写程序,这时太不仔细讲了。
如果你手头刚好有QQ2440的全套linux镜像文件,你可以按qq2440用户手册上办法,一步步烧写程序,这时太不仔细讲了。
要注意的是,你的nor与nand中的supervivi最好用qq2440原来的老板本,然后用supervivi对nand进行默认分区。
顺利的话,你的板子跑起了linux, 只是版本有点点老,内容有点点旧,功能有点点单薄,想在上面搞点什么事情,必须自己编译。
好了,今天要讲的重点来了。 如何把别人做好的镜像烧进来。如果你仔细找找,2440的现成linux镜像文件很容易获得的,而且硬件资源大同小异,
顺利的话,你的板子跑起了linux, 只是版本有点点老,内容有点点旧,功能有点点单薄,想在上面搞点什么事情,必须自己编译。
好了,今天要讲的重点来了。 如何把别人做好的镜像烧进来。如果你仔细找找,2440的现成linux镜像文件很容易获得的,而且硬件资源大同小异,
最大的区别可能就是CS8900与DM9000二种网卡。QQ2440是CS8900网卡,mini2440是DM9000网卡,好在有很多通用镜像,同时集成了二种网卡的驱动。
但是要把现成的镜像烧进QQ2440中,还是会失败,因为nand的分区不一致。
首先我们看linux启动顺序。 bootloader从系统首位开始加载,加载完后,引出第kernel启动地址,kernel启动完后,引出rootfs启动地址。
首先我们看linux启动顺序。 bootloader从系统首位开始加载,加载完后,引出第kernel启动地址,kernel启动完后,引出rootfs启动地址。
而linux系统编译好后,nand分区地址的入口端也在内核中指定了。所以要让我们的QQ2440板子能跑起别人的镜像,就要先按镜像包中的分区地址先行分区。
好在我们有一个简单办法知道分区地址。
于是我们可以这么来做:
于是我们可以这么来做:
1. 想办法在板子的RAM中先跑出分区信息来:
a. 可以用tftp, win版的cisco tftp其实也很好用的,或者nfs, 或者bootloader加载。
b. 顺利的话,你可以加载并跑起kernel的部份,通常是zImage文件。
c. 在终端观察启动信息,仔细找其中nand分区信息。
2. 分区表信息有二种形式表示,
2. 分区表信息有二种形式表示,
一种是首地址加结束地址,如:0x00060000 0x00080000
另一种是首地址加长度,如: 0x00060000 0x00020000
上述二个例子,表达的是相同一段分区,具体还是看启动信息中的相关英文说明了。(offset,size, end, 之类的,总是能猜一下的)
3. 在supervivi中,把原有的分区删掉,按你找到的新分区表重建,建完后记得存一下。
4. 把kernel , rootfs 烧录到正确的位置。
3. 在supervivi中,把原有的分区删掉,按你找到的新分区表重建,建完后记得存一下。
4. 把kernel , rootfs 烧录到正确的位置。
这里也有个问题,就是直接用bootloader菜单上的烧写,依然会有点问题。于是我们用手动的来做,在supervivi中执行命令如下(uboot会在openwrt介绍中讨论).
a. 按Q进入命令行模式
b. 划定烧写分区,如:
part add kernel 0x00060000 0x00080000
load flash kernel usb
之后把kernel通过usb上传。
rootfs也是一样做法。
c. 必要时,需要修改supervivi启动菜单中的linux启动参数,这里就不仔细讨论了。
祝成功。
祝成功。
过去做openwrt,编译时,一直很纠结用x-wrt还是luci, 所以后来养成个坏习惯,就是二个全编译进去。经常换着用,呵呵。
个人觉得,QQ2440最适合用的系统,就是openwrt,能装下ubuntu的话,当然是用ubuntu了,毕竟那个资源丰富了。
现在我们就来做QQ2440版本的openwrt了。
1. 主机上安装好tftp server.
个人觉得,QQ2440最适合用的系统,就是openwrt,能装下ubuntu的话,当然是用ubuntu了,毕竟那个资源丰富了。
现在我们就来做QQ2440版本的openwrt了。
1. 主机上安装好tftp server.
2. 编译好全套的openwrt, (其中包括了uboot, uImage, rootfs,zImage)
a. 用svn 取到www.openwrt.org.cn的源。
b. make menuconfig中选上QQ2440, Target Images->tar.gz, boot loaders -->uboot , 其它你爱选什么就选什么好了.
c. make V=99, 如果你是第一遍编译,就别带 -j ,多核编译会有很多意外发生。
3. 在编译机上,安装mkimage包,其中的mkyaffs2image会需要用到。
4. 把rootfs打包成yaffs2格式:
a. 把编译好的rootfs.tar.gz(文件前缀有点不同,但就是这文件,自己找吧)文件,解压到任意目录中,但不要把文件自身放到这个目录中(如root_fs)。
b. 用mkyaffs2image打包这个目录(如mkyaffs2img root_fs rootfs.yaffs)
c. 这样你就有一个yaffs2格式的rootfs.
5. nor方式启动,进入supervivi命令行格式。
part add uboot 0x00000000 0x00060000
load flash uboot usb
然后用usb上传uboot
6. nand方式启动板子,看看uboot能不能启动。
7. 进入uboot的参数设置设置板子型号为gc2440(因为这是带网卡驱动的)
8. 在uboot菜单中,按c,切换至tftp方式,你也可以看一下uboot的ip设置,象我的就是板子地址192.168.1.2, 指定tftp地址是192.168.1.121
9. 尝试板子通过tftp运行tftp服务器端的zImage,看一下打印出来的执行结果,把nand分区表抄下来。
10. 重新对nand进行分区,并存盘。
11. 用uboot菜单方式烧写uImage(tftp方式)。
12. 用uboot菜单方式烧写YAFFS2格式,执行一次,烧写并不成功,但你会发现uboot把bootargs中的参数给改成YAFFS2了,如果你讨厌用setenv的话,这个是比较简单的办法。
13. 用nand write.yaffs 命令,把刚才做好的yaffs2格式的rootfs烧写到对应的分区中。
如:
tftp 0x30000000 rootfs.yaffs2
nand erase 0x580000 0x3200000
nand write.yaffs2 0x30000000 0x580000 0x???? (???? 看刚才下载的长度)
14. 重启
部份图片与附件,放在友善官网BBS上了,有兴趣的同学自己去下载来看。
图片: 

图片: 

浙公网安备 33010602011771号