去年年头碰到这样一个情况,要在一块没有SD card 的arm板子上,做usb ext3 image 安装,而且windows,

和linux 都可以用,于是模仿recovery 和diskinstall ,使用ADB,然后做成ramdisk 方式,在u-boot下选择

启动, 最近有空修改了下菜单,现在也不在做这方面的东西,放着也没用,扔到,或许有人会有用

代码放在:

git://repo.or.cz/u-tools.git

可以通过 git clone  下载

功能:

菜单上两个功能,Usb install, Disk(sdcard) install,后面有两个系统测试诊断的子菜单,目前为空

但是可以选择把LTP 一起build进来,添加到菜单就可以做一些LTP 方面的测试

支持touch  选择菜单

native linux ,android 下都可以用,只是linux 下,需要添加usb adb 驱动

linux 下用来烧写过emb Qt的ext2 image

目录:

projects : 放项目目录,里面的u-tools目录下的SConstruct,就是最开头的SCons 编译文件,

可以修改添加新的linux app 到ramdisk

u-tools  : build ramdisk 的所有元件,其中apps下面是做安装所需要的工具程序

比如busybox,e2fsprogs,从andorid 移过来的diskinstall,adbd,等等

tools    : 该目录放的是SCons 0.96,以及集成的交叉编译环境

编译:

1. 修改tools 目录下:

.cross_compile 文件来指定arm tool chain 的目录

2. 代码根目录下有utools.sh 执行可以编译

但一些目录需要修改:

./tools/build.py verbose_str=True MACHINE=s5pc100 PROJECT=u-tools TOOLCHAIN=gnu_arm_eabi_toolchain hello.TOOLCHAIN=gnu_arm_toolchain BUILD_DIR=build_out  PROJECT_DIR=~/samsung/u-tools/u-tools

PROJECT_DIR 修改成代码解压缩后,里面u-tools的目录

BUILD_DIR修改编译 输出目录

命令执行成功后在BUILD_DIR所指定的目录的image 目录下生成 u-tools.img的ramdisk 文件

这是u-boot 直接能用的,不用再做mkimg

配置:

1.菜单修改在:

u-tools\apps\hello\ui\menu.h 文件中添加修改

2.inand 的disklayout (其实就是分区)

在u-tools\apps\usbinit\disk_layout.c  中修改,和android disk layout conf 一样,

加菜单时我测试是在android 上做的,sample分了4个区,大概如下:

struct part_info mypart_info[/*5*/] = {
{.name = "system",
.flags = PART_ACTIVE_FLAG,
.type = PC_PART_TYPE_LINUX,
.len_kb = 256*1024,//256 * 1024 *1024/1024
},
{.name = "recovery",
.type = PC_PART_TYPE_LINUX,
.len_kb = 256*1024,//256 * 1024 *1024/1024
},
{.name = "cache",
.type = PC_PART_TYPE_LINUX,
.len_kb = 128*1024, //51 * 1024 *1024/1024
},
{.name = "data",
.type = PC_PART_TYPE_LINUX /*PC_PART_TYPE_DOS*/,
#ifdef SOC_SIRF_PRIMA
.len_kb = -1,/*128 * 1024 *1024/1024*/
#else
.len_kb = 1024*1024,/*128 * 1024 *1024/1024*/
#endif
}/*,
{.name = "other",
.type = PC_PART_TYPE_LINUX,
.len_kb = -1
}*/
};
struct disk_info mydisk_info = {
.device = "/dev/mmcblk0",
.scheme = PART_SCHEME_MBR,
.sect_size = 512,
.num_lba = 0,
.skip_lba = 20000,
/*.part_lst = &mypart_info,*/
.num_parts = /*5*/4
};

其中关于sirf 和samsung 的选择主要是因为两个cpu 对SD 启动的方向不同,一个是从sd前面

的sector开始,而samsung,是从后面的sector开始,这个在定layout  时要注意,目前samsuang类不是很精确

只是估算了下,后面需要保留多少sector ,用于放 raw image

device = /dev/mmcblk0, 是定义需要安装的disk 的名字,因为没有udev,所以要注意两个 sd  时的情况,这个你懂的

其实改下sd驱动就可以固定下来

3. 路径设置:

u-tools\apps\diskinstaller\installer.h 文件中设置了

安装配置文件目录 和 烧写image 存放的目录

Image 的烧写:

ramdisk 起来后显示菜单, 菜单通过touch 选择,短点一下移动菜单,长时间按下touch ,选中

菜单

1.sd install ,将根目录下 sample 安装文件installer.conf,和

android system.img(ext2格式)copy到sdcard ,插入机器开始安装

2. usb install ,选择windows 或者linux 的android sdk 目录中的adb ,进行installer.conf

和system.img 文件的push,然后执行adb reboot ,target 端就开始安装,并显示状态,

目前状态比较简单,可自行添加

在linux 可以通过根目录下的installer.sh 脚本执行安装,插上usb ,

linux 下输入 ./installer.sh  安装配置文件   安装image 文件

3. 可以参考android installer.conf 配置文件,还可以进行包括u-boot,kernel,等raw image 的烧写

需要改进的地方:

1. ramdisk 需要瘦身,目前大概为2M

2. 添加vfat 格式化等操作

3. 可以将android recovery 移过来进行mtd 类flash 的安装 (ubi 等也可以实现)

4. 配置还不是自动化,从最后sector 启动的layout 配置,还不精确

5. ext4 的支持,由于e2fsprogs是1.4版本,简单修改下就可以支持ext4