执行力心得体会怎么写:从makefile到内核&文件系统
来源:百度文库 编辑:中财网 时间:2024/05/04 04:59:32
从makefile到内核&文件系统
分类: LINUX 内核 2009-09-20 17:25 401人阅读 评论(0) 收藏 举报内核源代码树在/usr/local/icom_new目录下
从顶层makefile分析开始(/usr/local/icom_new/Makefile)
17ifeq (.config,$(wildcard .config))
18include .config
19# all: ucfront subdirs romfs modules modules_install image
20all: ucfront cksum subdirs romfs image
21else
22all: config_error
23endif
在第20行的all是make首次要更新的目标,此目标依赖于ucfront cksum subdirs romfs image这5个目标.
1.ucfront目标
87.PHONY: ucfront
88ucfront: tools/ucfront/*.c
89 $(MAKE) -C tools/ucfront
90 ln -sf $(ROOTDIR)/tools/ucfront/ucfront tools/ucfront-gcc
91 ln -sf $(ROOTDIR)/tools/ucfront/ucfront tools/ucfront-g++
92 ln -sf $(ROOTDIR)/tools/ucfront/ucfront-ld tools/ucfront-ld
展开为:
make -C tools/ucfront
make[1]: Entering directory `/usr/local/icom_new/tools/ucfront'
make[1]: “ucfront”是最新的。
make[1]: Leaving directory `/usr/local/icom_new/tools/ucfront'
上述代码生成了目标ucfront
ucfront的作用:
根据用户选择的c库,来配置编译器的动态链接库的路径。
2.cksum目标
94.PHONY: cksum
95cksum: tools/sg-cksum/*.c
96 $(MAKE) -C tools/sg-cksum
97 ln -sf $(ROOTDIR)/tools/sg-cksum/cksum tools/cksum
展开为:
make -C tools/sg-cksum
make[1]: Entering directory `/usr/local/icom_new/tools/sg-cksum'
make[1]: “cksum”是最新的。
make[1]: Leaving directory `/usr/local/icom_new/tools/sg-cksum'
ln -sf /usr/local/icom_new/tools/sg-cksum/cksum tools/cksum
上述代码生成了目标cksum
3.subdirs目标
327.PHONY: subdirs
328subdirs: linux modules
329 echo "Build start unix"
330 echo $(BUILD_START_UNIX)
331 for dir in $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH_KERNEL) -C $$dir || exit 1 ; done
可见subdirs目标依赖于linux和modules,更新完linux和modules,才会执行如下语句:
echo "Build start unix"
echo $(BUILD_START_UNIX)
for dir in $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH_KERNEL) -C $$dir || exit 1 ; done
3.1.linux目标
.PHONY: linux
linux linux%_only:
@if [ $(LINUXDIR) != linux-2.5.x /
-a $(LINUXDIR) != linux-2.6.x /
-a $(LINUXDIR) != linux-2.6.16.RT.x /
-a ! -f $(LINUXDIR)/.depend ] ; then /
echo "ERROR: you need to do a 'make dep' first" ; /
exit 1 ; /
fi
$(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) $(LINUXTARGET) || exit 1
if [ -f $(LINUXDIR)/vmlinux ]; then /
ln -f $(LINUXDIR)/vmlinux $(LINUXDIR)/linux ; /
fi
@echo "Strip Linux kernel image from ELF to binary..."
rm -f linux.bin
$(CROSS_COMPILE)objcopy -I elf32-littlearm -O binary $(LINUXDIR)/linux $(LINUXDIR)/linux.bin
@if [ ! -d images ] ; then /
mkdir images; /
fi
cp -f $(LINUXDIR)/linux.bin images/.
展开为:
make ARCH=arm CROSS_COMPILE=arm-linux- ARCH=arm CROSS_COMPILE=arm-linux- -j4 -C linux-2.6.16.RT.x zImage || exit 1
make[1]: Entering directory `/usr/local/icom_new/linux-2.6.16.RT.x'
CHK include/linux/version.h
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/mconf.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf -s arch/arm/Kconfig
#
# using defaults found in .config
#
SPLIT include/linux/autoconf.h -> include/config/*
SYMLINK include/asm-arm/arch -> include/asm-arm/arch-ixp4xx
HOSTCC scripts/kallsyms
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
...
部分省略,基本都是AS、CC、LD的信息,后面我们在分析
...
LD net/ipv4/netfilter/ip_conntrack.o
LD net/ipv4/netfilter/ip_nat.o
LD net/ipv4/netfilter/ip_conntrack_pptp.o
LD net/ipv4/netfilter/built-in.o
LD net/ipv4/built-in.o
LD net/built-in.o
GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
KSYM .tmp_kallsyms2.S
AS .tmp_kallsyms2.o
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gz
CC arch/arm/boot/compressed/misc.o
AS arch/arm/boot/compressed/head-xscale.o
AS arch/arm/boot/compressed/big-endian.o
AS arch/arm/boot/compressed/piggy.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
make[1]: Leaving directory `/usr/local/icom_new/linux-2.6.16.RT.x'
if [ -f linux-2.6.16.RT.x/vmlinux ]; then /
ln -f linux-2.6.16.RT.x/vmlinux linux-2.6.16.RT.x/linux ; /
fi
Strip Linux kernel image from ELF to binary...
rm -f linux.bin
arm-linux-objcopy -I elf32-littlearm -O binary linux-2.6.16.RT.x/linux linux-2.6.16.RT.x/linux.bin
cp -f linux-2.6.16.RT.x/linux.bin images/.
到此为止,内核镜像已经生成了,在/usr/local/icom_new/linux-2.6.16.RT.x/arch/arm/boot/下面,而在/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L下的makefile中有如下语句:
cp $(ROOTDIR)/$(LINUXDIR)/arch/arm/boot/zImage $(KERNELZ)
if [ -d /tftpboot ]; then /
cp $(KERNELZ) /tftpboot/$(USER)-$(MODELNAME).zImage 2> /dev/null; /
上述语句仅仅把内核镜像改名,并存放到/tftpboot目录下。
所以,截止到这一步,内核的最终镜像已经生成了。
3.2.module目标
203.PHONY: modules
204modules:
205 . $(LINUXDIR)/.config; if [ "$$CONFIG_MODULES" = "y" ]; then /
206 [ -d $(LINUXDIR)/modules ] || mkdir $(LINUXDIR)/modules; /
207 $(MAKEARCH_KERNEL) -C $(LINUXDIR) modules; /
208 fi
展开为:
. linux-2.6.16.RT.x/.config; if [ "$CONFIG_MODULES" = "y" ]; then /
[ -d linux-2.6.16.RT.x/modules ] || mkdir linux-2.6.16.RT.x/modules; /
make ARCH=arm CROSS_COMPILE=arm-linux- ARCH=arm CROSS_COMPILE=arm-linux- -C linux-2.6.16.RT.x modules; /
fi
make ARCH=arm CROSS_COMPILE=arm-linux- ARCH=arm CROSS_COMPILE=arm-linux- -C linux-2.6.16.RT.x modules;这句话要求进入linux-2.6.16.RT.x目录执行make modules
linux-2.6.16.RT.x目录下的makefile文件中对modules目标的描述如下:
.PHONY: modules
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
@echo ' Building modules, stage 2.';
$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
展开为:
make[1]: Entering directory `/usr/local/icom_new/linux-2.6.16.RT.x'
CHK include/linux/version.h
make[2]: “include/asm-arm/mach-types.h”是最新的。
CC [M] drivers/net/ixp400_eth.o
Building modules, stage 2.
MODPOST
CC drivers/net/ixp400_eth.mod.o
LD [M] drivers/net/ixp400_eth.ko
make[1]: Leaving directory `/usr/local/icom_new/linux-2.6.16.RT.x'
到此处为止,集成在内核源代码里边的网卡驱动生成了。
3.3.subdirs生成规则
至此subdirs的linux和modules目标更新结束,我们回到顶层makefile的subdirs目标下查看生成规则:
329 echo "Build start unix"
330 echo $(BUILD_START_UNIX)
331 for dir in $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH_KERNEL) -C $$dir || exit 1 ; done
展开如下
echo "Build start unix"
Build start unix
echo 1250797288
1250797288
for dir in include lib include user ; do [ ! -d $dir ] || make ARCH=arm CROSS_COMPILE=arm-linux- ARCH=arm CROSS_COMPILE=arm-linux- -C $dir || exit 1 ; done
这段语句描述了,linux和modules目标如何生成subdirs,这应该是最核心的内容了.
这段代码显示,将分别进入icow_new下的inlucde,lib,include,user目录下执行make.
3.3.1.include目录:
/usr/local/icom_new/include下makefile如下:
all: clean
@echo "Making symlinks in include/"
@for p in $(LINKHDRS); do /
src=`expr "$$p" : '/(.*/),.*'` ; /
dst=`expr "$$p" : '.*,/(.*/)'` ; /
for i in $$src; do /
[ ! -e "$$i" ] && continue; /
[ "`basename $$i`" = CVS ] && continue; /
[ -L "$$dst/`basename $$i`" ] && continue; /
[ -d $$dst ] || mkdir $$dst; /
ln -s $$i $$dst/.; /
done ; /
done
@rm -rf include-linux
@mkdir -p include-linux
@ln -s $(ROOTDIR)/$(LINUXDIR)/include/linux include-linux/linux
ifndef CONFIG_DEFAULTS_LIBC_NONE
@rm -f gcc
@ln -s `$(CC) -print-file-name=include` gcc
@echo "Making include/c++ symlink to compiler c++ includes"
@rm -f c++
@ln -s /usr/local/include/g++-v3 c++
@for i in `$(CXX) -v -E -xc++ /dev/null 2>&1 | sed -e '/^Reading specs/,/^#include /d' -e '/End of search list/Q'`; do /
if [ -f $$i/new ]; then rm -f c++; ln -s $$i c++; break; fi; /
done
@ln -s c++ `$(CC) --version | head -1 | cut -d " " -f3`
@ln -s c++ g++-v3
endif
romfs:
clean:
-find . -depth -type l -a ! -name Makefile | xargs rm > /dev/null 2>&1 || exit 0
-find . -depth -type d | grep -v .svn | xargs rmdir > /dev/null 2>&1 || exit 0
展开为:
make[1]: Entering directory `/usr/local/icom_new/include'
find . -depth -type l -a ! -name Makefile | xargs rm > /dev/null 2>&1 || exit 0
find . -depth -type d | grep -v .svn | xargs rmdir > /dev/null 2>&1 || exit 0
Making symlinks in include/
Making include/c++ symlink to compiler c++ includes
make[1]: Leaving directory `/usr/local/icom_new/include'
3.3.2.lib目录
4.romfs目标
.PHONY: romfs
romfs: romfs.subdirs modules_install romfs.post
.PHONY: romfs.subdirs
romfs.subdirs:
for dir in vendors $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH) -C $$dir romfs || exit 1 ; done
.PHONY: modules_install
modules_install:
. $(LINUXDIR)/.config; if [ "$$CONFIG_MODULES" = "y" ]; then /
[ -d $(ROMFSDIR)/lib/modules ] || mkdir -p $(ROMFSDIR)/lib/modules; /
$(MAKEARCH_KERNEL) -C $(LINUXDIR) INSTALL_MOD_PATH=$(ROMFSDIR) DEPMOD="../user/busybox/examples/depmod.pl -k vmlinux" modules_install; /
rm -f $(ROMFSDIR)/lib/modules/*/build; /
rm -f $(ROMFSDIR)/lib/modules/*/source; /
find $(ROMFSDIR)/lib/modules -type f -name "*o" | xargs -r $(STRIP) -R .comment -R .note -g --strip-unneeded; /
fi
.PHONY: romfs.post
romfs.post:
$(MAKEARCH) -C vendors romfs.post
-find $(ROMFSDIR)/. -name CVS | xargs -r rm -rf
4.1.romfs.subdirs目标
.PHONY: romfs.subdirs
romfs.subdirs:
for dir in vendors $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH) -C $$dir romfs || exit 1 ; done
展开为:
for dir in vendors include lib include user ; do [ ! -d $dir ] || make ARCH=arm CROSS_COMPILE=arm-linux- -C $dir romfs || exit 1 ; done
4.1.1.vendors目标(/usr/local/icom_new/vendors)
all image clean romfs romfs.post vendor_%:
$(MAKE) -C $(dir_v) dir_v=$(dir_v) -f $(VEND)/vendors-common.mak $@
展开为:
make -C /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/. dir_v=/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/. -f /usr/local/icom_new/vendors/vendors-common.mak romfs
此语句将进入/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/Makefile执行make romfs:
romfs:
if [ ! -d $(IX_XSCALE_SW) ] ; then /
echo $(CONFIG_PRODUCT) " needs the IXP400 software library"; /
fi
$(MAKE) -C $(IX_XSCALE_SW) all
if [ ! -d $(ROOTDIR)/adv950_modules/adv950_v3_26/2.6 ] ; then /
echo $(CONFIG_PRODUCT) " needs the adv950 driver"; /
fi
$(MAKEARCH) M=$(ROOTDIR)/adv950_modules/adv950_v3_26/2.6
# $(MAKE) -f Makefile.uclinux -C $(ROOTDIR)/adv950_modules/adv950_v3_26/2.6 all
[ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)
for i in $(ROMFS_DIRS); do /
[ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)/$$i; /
done
$(ROMFSINST) /etc/rc
$(ROMFSINST) /etc/inittab
$(ROMFSINST) ../../Generic/romfs/etc/services /etc/services
$(ROMFSINST) /etc/motd
$(ROMFSINST) /etc/passwd
$(ROMFSINST) /etc/group
#I added begin 08/07
$(ROMFSINST) /etc/inetd.conf
#I added end
echo "$(VERSIONSTR) -- " `date` > $(ROMFSDIR)/etc/version
可见,romfs目标完成如下工作:
(1).进入/usr/local/icom_new/ixp400_xscale_sw目录和/usr/local/icom_new/ixp_osal目录进行编译,即把intel的库编译出来
(2).查看串口驱动的目录是否存在,若存在,则编译之
(3),创建文件系统的基本目录:bin dev etc etc/config etc/default home home/httpd home/cgi-bin lib lib/modules mnt proc sbin tmp usr usr/bin usr/sbin var var/lock var/log var/run var/tmp var/empty home home/cgi-bin
(4).初步复制一些配置文件到/usr/local/icom_new/romfs/etc目录下
4.1.2.include目标
include录下的makfile中,romfs目标下面是个空语句,什么都不做
4.1.3.lib目标
lib目录下makefile中romfs的描述如下:
romfs:
$(ROMFSINST) -e CONFIG_USER_FLATFSD_FLATFSD -s config/passwd /etc/passwd
$(ROMFSINST) -e CONFIG_USER_FLATFSD_FLATFSD -s config/group /etc/group
$(ROMFSINST) -e CONFIG_USER_FLATFSD_FLATFSD -s config/mtab /etc/mtab
$(ROMFSINST) -e CONFIG_USER_FLATFSD_FLATFSD -s config/fstab /etc/fstab
$(ROMFSINST) -e CONFIG_USER_FLATFSD_FLATFSD -s config/resolv.conf /etc/resolv.conf
$(ROMFSINST) -e CONFIG_USER_FLATFSD_FLATFSD -e CONFIG_USER_TINYLOGIN_SHADOWPASSWDS -s config/shadow /etc/shadow
for i in $(DIRS_y) ; do /
[ ! -d $$i ] || make -C $$i romfs || exit $$? ; /
done
展开为:
make[1]: Entering directory `/usr/local/icom_new/lib'
romfs-inst.sh -e CONFIG_USER_FLATFSD_FLATFSD -s config/passwd /etc/passwd
romfs-inst.sh -e CONFIG_USER_FLATFSD_FLATFSD -s config/group /etc/group
romfs-inst.sh -e CONFIG_USER_FLATFSD_FLATFSD -s config/mtab /etc/mtab
romfs-inst.sh -e CONFIG_USER_FLATFSD_FLATFSD -s config/fstab /etc/fstab
romfs-inst.sh -e CONFIG_USER_FLATFSD_FLATFSD -s config/resolv.conf /etc/resolv.conf
romfs-inst.sh -e CONFIG_USER_FLATFSD_FLATFSD -e CONFIG_USER_TINYLOGIN_SHADOWPASSWDS -s config/shadow /etc/shadow
for i in uClibc zlib /usr/local/icom_new/prop ; do /
[ ! -d $i ] || make -C $i romfs || exit $? ; /
done
最后的for循环告诉我们,需要进入uClibc和zlib目录下执行make romfs.
4.1.3.1.uClib(/usr/local/icom_new/uClib)
romfs:
[ -e $(ROMFSDIR)/lib ] || mkdir $(ROMFSDIR)/lib
@if [ "$(SHARED_TARGET)" ]; then /
$(ROMFSINST) $(SHARED_TARGET) /lib/lib$(LIBID).so; /
fi
ifeq ($(strip $(HAVE_SHARED)),y)
@set -e; for i in lib/lib*-$(UCLIBC_VERSION).so lib/*.so.*; do /
$(ROMFSINST) -p 755 $$i /lib; /
done
@set -e; if [ -x lib/ld-uClibc-$(UCLIBC_VERSION).so ] ; then /
$(ROMFSINST) -p 755 lib/ld-uClibc-$(UCLIBC_VERSION).so /lib; /
$(ROMFSINST) -s /
/lib/ld-uClibc-$(UCLIBC_VERSION).so /
/lib/ld-linux.so.2; /
fi;
endif
上述代码将/usr/local/icom_new/uClibc/lib目录下的动态库文件进行连接、strip,然后拷贝到/usr/local/icom_new/romfs/lib目录下
4.1.3.2.zlib(/usr/local/icom_new/lib/zlib)
/usr/local/icom_new/lib/zlib目录下的makefile对romfs目标没有描述.
4.1.4.include目标
include录下的makfile中,romfs目标下面是个空语句,什么都不做
4.1.5.user目标(/usr/local/icom_new/user)
/usr/local/icom_new/user目录下makefile对romfs的描述如下:
romfs:
for i in $(sort $(dir_y)) $(dir_p) ; do /
[ ! -d $$i ] || $(MAKE) -C $$i romfs || exit $$? ; /
done
展开为:
for i in bash busybox ftp games init lrzsz mtd-utils /usr/local/icom_new/prop ; do /
[ ! -d $i ] || make -C $i romfs || exit $? ; /
done
上述语句进而进入应用程序目录下进行应用程序的编译,并将可执行文件安装到/usr/local/icom_new/romfs/bin或/usr/local/icom_new/romfs/sbin下面
5.image目标
顶层makefile对image目标的描述如下:
.PHONY: image
image:
[ -d $(IMAGEDIR) ] || mkdir $(IMAGEDIR)
$(MAKEARCH) -C vendors image
展开为:
[ -d /usr/local/icom_new/images ] || mkdir /usr/local/icom_new/images
make ARCH=arm CROSS_COMPILE=arm-linux- -C vendors image
将进入vendors目录执行make image
5.1.vendors(/usr/local/icom_new/vendors)
/usr/local/icom_new/vendors下的makefile对image的描述如下
$(MAKE) -C $(dir_v) dir_v=$(dir_v) -f $(VEND)/vendors-common.mak $@
词语就显示:它将执行/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/makefile中的image目标
/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/makefile中对image目标的定义如下
image:
cp $(IX_XSCALE_SW)/$(IX_DEVICE)/lib/$(IX_TARGET)/ixp400.ko $(ROMFSDIR)/lib/modules/.
cp $(ROOTDIR)/adv950_modules/adv950_v3_26/2.6/adv950.ko $(ROMFSDIR)/lib/modules/.
#I added begin 08/05
#cp $(PWD)/arp/ixp400_eth.ko $(ROMFSDIR)/lib/modules/.
#I added end 08/05
cp $(PWD)/IxNpeMicrocode.dat $(ROMFSDIR)/etc/.
cp $(PWD)/ssh/sshd_config $(ROMFSDIR)/etc/.
cp $(PWD)/ssh/id_rsa $(ROMFSDIR)/etc/.
cp $(PWD)/ssh/id_rsa.pub $(ROMFSDIR)/etc/.
cp $(PWD)/arp/arp_announce $(ROMFSDIR)/home/.
cp $(PWD)/arp/arp_ignore $(ROMFSDIR)/home/.
cp $(PWD)/sslkey/*.pem $(ROMFSDIR)/etc/config/.
[ -d $(IMAGEDIR) ] || mkdir -p $(IMAGEDIR)
-$(ROMFSINST) -e CONFIG_IXP400_LIB_2_0 /
-d $(ROOTDIR)/modules/ixp425/ixp400-2.0/IxNpeMicrocode.dat /
/etc/IxNpeMicrocode.dat
-$(ROMFSINST) -e CONFIG_IXP400_LIB_2_1 /
-d $(ROOTDIR)/modules/ixp425/ixp400-2.1/IxNpeMicrocode.dat /
/etc/IxNpeMicrocode.dat
#genext2fs -b 8192 -f dev.txt -d $(ROMFSDIR) $(RAMDISK)
#advlzo -c $(RAMDISK) $(RAMDISK).lzo
#rm -f $(RAMDISK).gz
#gzip $(RAMDISK)
#chmod 777 $(RAMDISK).gz
mkfs.jffs2 -U -d $(ROOTDIR)/romfs -D devtable.jffs2.txt -b -e 0x20000 -p 0x00D00000 -o $(JFFS2DISK).img
cp $(ROOTDIR)/$(LINUXDIR)/arch/arm/boot/zImage $(KERNELZ)
if [ -d /tftpboot ]; then /
cp $(KERNELZ) /tftpboot/$(USER)-$(MODELNAME).zImage 2> /dev/null; /
#cp $(RAMDISK).gz /tftpboot/$(USER)-$(MODELNAME).ramdisk.gz 2> /dev/null; /
#cp $(RAMDISK).lzo /tftpboot/$(USER)-$(MODELNAME).ramdisk.lzo 2> /dev/null; /
cp $(JFFS2DISK).img /tftpboot/$(USER)-$(MODELNAME).jffs2fs.img 2> /dev/null; /
fi
展开为:
make[1]: Entering directory `/usr/local/icom_new/vendors'
make -C /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/. dir_v=/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/. -f /usr/local/icom_new/vendors/vendors-common.mak image
make[2]: Entering directory `/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L'
cp /usr/local/icom_new/ixp400_xscale_sw/ixp43X/lib/linuxbe/ixp400.ko /usr/local/icom_new/romfs/lib/modules/.
cp /usr/local/icom_new/adv950_modules/adv950_v3_26/2.6/adv950.ko /usr/local/icom_new/romfs/lib/modules/.
#I added begin 08/05
#cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/arp/ixp400_eth.ko /usr/local/icom_new/romfs/lib/modules/.
#I added end 08/05
cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/IxNpeMicrocode.dat /usr/local/icom_new/romfs/etc/.
cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/ssh/sshd_config /usr/local/icom_new/romfs/etc/.
cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/ssh/id_rsa /usr/local/icom_new/romfs/etc/.
cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/ssh/id_rsa.pub /usr/local/icom_new/romfs/etc/.
cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/arp/arp_announce /usr/local/icom_new/romfs/home/.
cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/arp/arp_ignore /usr/local/icom_new/romfs/home/.
cp /usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L/sslkey/*.pem /usr/local/icom_new/romfs/etc/config/.
[ -d /usr/local/icom_new/images ] || mkdir -p /usr/local/icom_new/images
romfs-inst.sh -e CONFIG_IXP400_LIB_2_0 /
-d /usr/local/icom_new/modules/ixp425/ixp400-2.0/IxNpeMicrocode.dat /
/etc/IxNpeMicrocode.dat
romfs-inst.sh -e CONFIG_IXP400_LIB_2_1 /
-d /usr/local/icom_new/modules/ixp425/ixp400-2.1/IxNpeMicrocode.dat /
/etc/IxNpeMicrocode.dat
genext2fs -b 8192 -f dev.txt -d /usr/local/icom_new/romfs /usr/local/icom_new/images/ramdisk
advlzo -c /usr/local/icom_new/images/ramdisk /usr/local/icom_new/images/ramdisk.lzo
Ratio = 0.204247
rm -f /usr/local/icom_new/images/ramdisk.gz
gzip /usr/local/icom_new/images/ramdisk
chmod 777 /usr/local/icom_new/images/ramdisk.gz
mkfs.jffs2 -U -d /usr/local/icom_new/romfs -D devtable.jffs2.txt -b -e 0x20000 -p 0x00D00000 -o /usr/local/icom_new/images/jffs2fs.img
cp /usr/local/icom_new/linux-2.6.16.RT.x/arch/arm/boot/zImage /usr/local/icom_new/images/zImage
if [ -d /tftpboot ]; then /
cp /usr/local/icom_new/images/zImage /tftpboot/root-EKI-1126L.zImage 2> /dev/null; /
cp /usr/local/icom_new/images/ramdisk.gz /tftpboot/root-EKI-1126L.ramdisk.gz 2> /dev/null; /
cp /usr/local/icom_new/images/ramdisk.lzo /tftpboot/root-EKI-1126L.ramdisk.lzo 2> /dev/null; /
cp /usr/local/icom_new/images/jffs2fs.img /tftpboot/root-EKI-1126L.jffs2fs.img 2> /dev/null; /
fi
make[2]: Leaving directory `/usr/local/icom_new/vendors/AdvantechPlatform/EKI-1126L'
make[1]: Leaving directory `/usr/local/icom_new/vendors'
可见,此处的image目标完成了以下内容:
(1).向/usr/local/icom_new/romfs/etc目录下拷贝一些必要的配置文件
(2).把模块拷贝到/usr/local/icom_new/romfs/lib/modules目录下
(3).到此为止,/usr/local/icom_new/romfs目录下已经是一个完整的文件系统的目录结构,使用如下命令将此目录作成jffs2的文件系统:
mkfs.jffs2 -U -d /usr/local/icom_new/romfs -D devtable.jffs2.txt -b -e 0x20000 -p 0x00D00000 -o /usr/local/icom_new/images/jffs2fs.img
-D devtable.jffs2.txt参数告诉我们使用devtable.jffs2.txt作为设备表文件,mkfs.jffs2会根据此文件的内容生成/dev目录下的设备文件。(若不使用此参数,你必须手动创建一些启动文件系统所必须的设备文件,比如:console等)
至此文件系统和内核镜像都已经生成了。