想从头说清楚如何来在assabet上作linux嵌入式,是有些困难的,所以先说个大概的制作步骤吧。 首先所有的资料都来源于 http://handhelds.org/ 和 http://www.lart.tudelft.nl/以及我的实践经验。 特别建议您先买块intel的assabet的开发板。 如果按照下面的资料成功的在assabet开发板上跑除了linux,那么您就可以尝试着制作自己想要的系统了,因为这些都是open source的,我想做的就是open技术和经验。国外的好多code是开放的,而且技术也是开放的,然而这些开放的东西到了国内,则会被有些技术人员作为保密资料,作为自己的价值向公司提要求......这也阻碍的国内linux的发展。我个人认为,已经公开的东西应该努力让大家可以找到,可以参考。我们要做的是在这些已有的、公开的技术上面作行业应用,而不是每个想作应用的技术人员又来从头研究如何作基础的平台。当然首先这个平台要满足需求。我希望大家可以将自己掌握的技术写出来,写成教程最好了,全民提高啊!台湾的同胞有一些中文化的计划,不是空谈,有结果出来,国内好多站点上也可以看到一些资料翻译计划,但是很少看到有结果出来。尤其有些技术一般很少使用到,如果一个有使用经验的人写出来,会更有帮助的。拜托大家了。 首先需要的资料是: bootldr-0000-2.14.5 :bootloader,是一个纯ARM指令序列。 params-v20.bin :bootloader执行时需要的参数。 init-2-70.cramfs :kernel引导后需要的系统文件和一些基本指令(/dev /etc /home /lib /root /tmp /var等等) root-2-57.cramfs :root filesystem,其中出现在initial中的目录为连接。 usr-2-61.cramfs :图形环境的code (/usr/X11R6) zImage-2.4.0-rmk2-np1-hh1 :kernel 可以 ftp://ftp.handhelds.org/pub/linux/compaq/ipaq/stable/update.html 下载这些资料。这些资料都有已经做好的。所以先尝试一下如何在assabet上安装一个linux环境。然后在通晓一个整体的步骤之后,再详细介绍这些资料档如何制作。 我首先大概说明一下如何安装: ipaq 将 flash 存贮器规划成 7 个 partition, 分别是 mtdblock0 ~ mtdblock6,如下表 usage size mount dir mtdblock0 bootldr 256K (bootldr-0000-2.14.5) mtdblock1 kernel 512K (zImage-2.4.0-rmk2-np1-hh1) mtdblock2 params 256K (params-v20.bin) mtdblock3 init 1M /dev, /etc, /lib/modules, /var (init-2-70.cramfs) mtdblock4 root 3M /bin, /sbin, /lib (root-2-57.cramfs) mtdblock5 usr 8M /usr (usr-2-61.cramfs) mtdblock6 local 3M or 19M(FB) /usr/local mtdblock{3,4,5} 用 cram文件系统, /usr/local 要给 user 写入, 所以保留为 ext2文件系统. root 和 init是整个系统基本的内容, run time 不需要写入的目录集中在 root, 需要写入的目录集中在 init, 而 init 的内容将会在开机 copy 到 ramfs。usr 只规划了 8MB, 你想调整 partition 的大小, 请修改kernel目录树中 drivers/mtd/sa1100_flash.c 关于设备划分的部分. 安装开始: 首先您得有一台linux pc机,而且支持串口通信,如果不支持,请重新编译kernel。 另外您还需要一个flash烧录工具软件jflash。这里可以下载windows版Jflash。 Jflash的source http://www.lart.tudelft.nl/projects/jtag/jflash-linux.tar.gz 可以编译出linux下的jflash。 在新的assabet开发板子上是需要烧录bootloader,如果下载了bootldr-0000-2.14.5,则使用专用的JTAG接线将assabet板子和pc机连接(打印机接口),并开通电源,然后在linux主机下键入命令: #./jflash-linux bootldr-0000-2.14.5 就会将bootldr烧录到assabet的flash中。具体的操作得看手册和多次尝试了。 具体烧录时遇到问题不会很多,如没有支持烧录的接口连线,那么您需要买专门烧录flash的板子了,用它来烧录bootldr. 也可以烧录blob,这是for LART的bootloader,下载 http://www.lart.tudelft.nl/lartware/blob/ 具体的烧录操作请参 http://www.lart.tudelft.nl/projects/jtag/ 烧录bootldr之后,接着就要烧录kernel,kernel是利用bootloader烧录的,bootloader通过串口和pc机通信。 这里说明一点,我使用的是blob,因为它灵活。而且编译也比较简单。有关blob的详细资料请参考blob source code 中的Readme档案。 如何烧录blob: 我想最好就是使用JTAG接口线了, 1。使用JTAG接口线将Assabet与您的主机的并口相连 2。打开Assabet的电源 3。使用jflash工具:jflash-linux blob 4。重新开启Assabet的电源,只是将Assabet与主机使用串口相连,并且使用minicom,就可以看到blob启动时的输出信息。 要做好以上的工作,主要是准备jflash和blob,请在相关站点下载source,和查阅相关的资料。 如何使用blob: 1。准备工作,将Assabet与一个终端连接,一般就与pc机的串口相连,运行串口通信程序minicom,设置参数为9600波特,8位数据,无奇偶校验,1位停止位, 无起始位。(9600 8N1)。做好这些准备工作后,接通Assabet的电源,然后blob开始运行,并显示信息 -------------------------------------- blob version 2.0.3 Copyright (C) 1999 2000 2001 Jan-Derk Bakker and Erik Mouw Copyright (C) 2000 Johan Pouwelse blob comes with ABSOLUTELY NO WARRANTY; read the GNU GPL for details. This is free software, and you are welcome to redistribute it under certain conditions; read the GNU GPL for details. Memory Map: 0x08000000 @ 0xC0000000 (8MB) 0x08000000 @ 0xC1000000 (8MB) 0x08000000 @ 0xC8000000 (8MB) 0x08000000 @ 0xC9000000 (8MB) Loading blob from flash . done Loading kernel from flash ....... done Loading ramdisk from flash ............... done Autoboot in progress, press any key to stop ... -------------------------------------- 这时可以键入任意键,就可以停在blob的命令方式下,否则将引导kernel(如果已经安装了kernel) -------------------------------------- Autoboot aborted Type "help" to get a list of commands blob> -------------------------------------- 上面就是进入了blob的命令工作方式,关于blob的命令这里简单说明,具体请参考source中的readme。 * boot: 引导linux kernel。 * clock: 设置Sa1100的时钟和DRAM的频率 * download {blob|kernel|ramdisk} 通过串口下载 blob/kernel/ramdisk 的印象到RAM * flash {kernel|ramdisk} 把 blob/kernel/ramdisk 从RAM烧录到flash中 * help 帮助信息 * reblob 从RAM中重新启动blob * reboot 重新启动系统 * reload {blobkernel|ramdisk} 重新从Flash中调入 blob/kernel/ramdisk 到RAM * reset 重新设置终端的状态 * speed 设置下载的速虑 * status 显示blob当前的状态 2。载入kernel: 在blob中键入命令 blob>download kernel,然后blob会改变串口传输速率到115200,并且等待串口输入,传输完成后,blob会自动切回到9600的速率。 --------------------------------------- Switching to 115200 baud You have 60 seconds to switch your terminal emulator to the same speed and start downloading. After that blob will switch back to 9600 baud. --------------------------------------- 在blob显示上面的信息后,请在PC主机上改变minicom的波特率到115200,然后在其他shell下使用令 uuencode zImage-2.4.0-rmk2-np1-hh1 zImage-2.4.0-rmk2-np1-hh1 > /dev/ttyS0 向串口写入kernel的Image。这里假设您所使用的串口是/dev/ttyS0. 传输完成,blob会显示如下的信息: --------------------------------------- (Please switch your terminal emulator back to 9600 baud) Received 65536 (0x00010000) bytes. --------------------------------------- 传输出错会显示 --------------------------------------- (Please switch your terminal emulator back to 9600 baud) *** Uudecode receive failed --------------------------------------- 传输成功后,再将minicom切换到9600波特,在blob下输入命令 blob>flash kernel 将会把kernel写入到flash中,跟在blob所占用的flash区块的后面,完成后会显示 --------------------------------------- blob> flash kernel Saving kernel to flash ..... .... done --------------------------------------- 3。下载ramdisk(init 和 root) 在blob中键入命令 blob>download ramdisk, 改变minicom的波特率到115200,然后在其他shell下使用令 uuencode init-2-70.cramfs init-2-70.cramfs > /dev/ttyS0 然后烧录到flash的0x00100000这个地址。 blob> flash ramdisk 0x00100000 一定要注意不能写错地址。 然后同样的方式下载root-2-57.cramfs,并烧录到0x00200000 blob>download ramdisk (uuencode root-2-57.cramfs root-2-57.cramfs > /dev/ttyS0 ) blob>flash ramdisk 0x00200000 为什么要烧到0x00100000和0x00200000,是因为从handhelds站点下载的kernel已经规划了flash,请参考前面的说明。使用blob作引导,就没有了bootldr所需要params,所以kernel和init之间的那256k flash是空的,当然如果你的kernel足够大,也可写到那里的。 4。安装usr: 由于usr这个印象比较大,当然您也可以使用串口传输并写到0x00500000。最好就是在上面的步骤都完成后,使用boot命令引导kernel,有时会出现问题,引导中断。那么可以重新打开电源,让blob自动引导,如果上面的步骤没有错误,一般就会启动了linux。可能会出现LCD的驱动有问题,LCD没有显示。那么就要参考后面讲到的如何编译kernel里的知识来修改驱动了。 还是通过minicom来与Assabet上的linux通讯,启动linux后,会自动在串口上打开一个终端,所以通过minicom来操作linux。 linux启动后,以root登录,不需要口令,然后使用ifconfig命令配置启动网卡,然后就可通过ftp将usr-2-61.cramfs下载到Assabet,使用命令 dd if=usr-2-61.cramfs of=/dev/mtdblock5 将usr-2-61.cramfs写到flash中。然后mount /dev/mtdblock5到/usr,就可以启动X了。 到了这里祝贺大家,您的嵌入式linux已经成功了!!! 上面是在已有资料的基础上来做的。大家多试几次之后,下面就开始讨论如何制作上面的这些资料 2. 编译kernel: a) 如何得到source b) 使用哪种文件系统和文件系统的划分(比较基本的事项) c) LCD的支持 d) TouchScreen的支持 e) CF卡的支持 3. Xtiny的构建: a) 取得source b) 如何编译 c) 注意事项TouchScreen,ARM芯片的内存四字节存取限制 4. 窗口管理器 a) 如何选择 b) ――有待详细考虑 5. 整体文件系统的规划和制作 a) 如何划分 b) 如何制作 c) 注意事项 6. 交叉编译 a) gcc cross compile tools的获得toolchain b) 如何进行cross compile 编译bootloader: 因为bootloader是在其他平台上执行的,所以一般在x86机子上要进行交叉编译。这就需要交叉编译的toolchain. 在后面将会介绍,这里是for ARM芯片的toolchain下载地址
ftp://ftp.handhelds.org/pub/linux/arm/toolchain/ 如果你有arm芯片的pc,并且安装了linux,这样就可以在pc长编译bootloader而不需要交叉编译了。 这是请注意要修改Makefile中的CROSS_COMPILE = arm-linux- 这行,改为CROSS_COMPILE = 修改bootloader: 当硬件平台有所改动时,就应该修改bootloader,当由于我没有较好的硬件支持和修改的经验,所以也没有好的建议,如果有哪位这方面的经验还请共享个大家,一同交流。 kernel: 嵌入式的kernel会与pc机的有些不同,主要在设备驱动程序上(TouchScreen,LCD,CF card)。对于嵌入式的kernel,也有专人维护,每新出一kernel的新版,就会有一版新的嵌入式kernel推出。下载地址是:
ftp://ftp.handhelds.org/pub/linux/compaq/ipaq/ linux-2.4.0-rmk1-np1-hh1.tar.gz ----------------------------------------------- Creating a new ext2 filesystem image dd if=/dev/zero of=init-ramdisk.img bs=1k count=8k mke2fs -i 1024 -b 1024 -m 3 -F -v init-ramdisk.img mkdir temp mount -o loop init-ramdisk.img temp cd temp (Do what you need to do.) cd .. umount temp gzip -9 init-ramdisk.img ------------------------------------------------ Modifying an existing ext2 filesystem image gunzip ramdisk-file.gz mkdir temp mount -o loop ramdisk-file temp cd temp (Do what you need to do.) cd .. umount temp gzip -9 ramdisk-file 这是我摘来的我正在看.供大家参考.
|