Chinaunix首页 | 论坛 | 博客
  • 博客访问: 438737
  • 博文数量: 78
  • 博客积分: 2030
  • 博客等级: 大尉
  • 技术积分: 1002
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 15:25
文章分类

全部博文(78)

文章存档

2012年(1)

2011年(1)

2010年(4)

2009年(12)

2008年(60)

我的朋友

分类: LINUX

2008-10-29 18:18:32

openwrt 包结构
如果要修改文件中的etc/rc.d/rcS文件
那么要按照一下步骤进行

最终的文件系统位置:
build_mips/root/etc/rc.d/rcS

实际的修改位置
/package/base-files/default/etc/rc.d/rcS

修改后重新编译前要把下面的目录删除
rm -fr build_mips/linux-2.6-ar91xx/base-files

重新编译:
make

重新配置kernel并编译
修改kernel的配置文件,位于:
ap81-openwrt/target/linux/ar91xx-2.6/config
然后将下面的目录删除
rm build_mips/linux-2.6-ar91xx/ -fr
重新编译


固件升级方法:
cat /home/user/ap81-openwrt/bin/uImage /home/user/ap81-openwrt/bin/pad.img | head -c 2031616 > /home/user/ap81-openwrt/bin/linux.pad
cat /home/user/ap81-openwrt/bin/info.pad /home/user/ap81-openwrt/bin/linux.pad /home/user/ap81-openwrt/bin/root.burn > /home/user/ap81-openwrt/bin/WN802Tv2-no-crc.img
/home/user/ap81-openwrt/staging_dir_mips/../tools/appendsum /home/river/ap81-openwrt/bin/WN802Tv2-no-crc.img /home/user/ap81-openwrt/bin/WN802Tv2-V1.0.1_1.0.3"".img


firmware.img结构
-------------------
device:
version: 128byte
region:
-------------------
kernel(uboot format)

pad
--------------------
rootfs
pad
checksum

/ # cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00400000 00010000 "rootfs"
mtd3: 00010000 00010000 "user-config"
mtd4: 001f0000 00010000 "uImage"
mtd5: 001b0000 00010000 "ART"


在升级前uhttp中的函数会先检查升级文件的合法性,首先检查checksum 然后检查device标志:
device标志在include/image.mk中的MODULE_NAME中定义。

升级函数采用mtd的方法把一个含有kernel和rootfs的文件写到对应的mtd块中
#define UPG_IMAGE_OFFSET 128
lseek(img_fd, UPG_IMAGE_OFFSET, SEEK_CUR);
sleep(5); /* wait for some seconds ... */
mtd_write(img_fd, len, UPG_MTD_LINUX);
mtd_write(img_fd, len, UPG_MTD_ROOTFS);

首先去掉头部信息。
然后将kernel写到/dev/mtd/4中,这块的大小是1f0000,故制作img的时候要pad head -c 2031616
这样的话kernel写完后 文件指针就指向rootfs的首地址,这样就能保证升级成功。

checksum采用perl脚本appendsum填在最后一个字节

阅读(3361) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~