vx中的prjConfig.c

我更改usrconfig.c文件某函数内的内容。在开发环境(Tonardo2.2)下REBUILDER ALL, 运行Vxworks发现我的修改没有起作用(也就是说我的修改未被编译)。编译过程的前面几步中有一步就是:

vxrm ..\prjComps.h ..\prjParams.h ..\prjConfig.c ..\linkSyms.c

然后又自动创建了一个新的prjConfig.c,所有刚才改过的prjConfig.c根本不奏效!

 

   在资料中看到如果使用手动编译,则编译的是usrconfig.c文件,如果在开发环境下编译则编译的是prjconfig.c。也就是说在IDE下编译就要按照prjConfig.c里各个程序的封装顺序执行,也就是说它已经抛开了usrConfig.c不管了!

   prjConfig.c引用usr***.c,目录是target/config/comps/src(简称C/S,!不是bootrom调用的同名函数)。图形界面下的初始配置来自bsp的config.h和makefile,在工程建立的时候系统会自动完成此工作,编译使系统会根据图形界面下的配置自动生成prjparam.h和prjComps.h来保存选中的组件和配置参数。此后配置的改动将通过prjConfig.c和这两个.h文件反映,再修改config.h不会对vxWorks的生成起作用。对上面三个文件的手工修改也会被系统自动覆盖。系统同时还在usrProj下自动生成makefile,同样不能通过对文件的直接修改达到更新目的。

 

   如果需要修改prjconfig.c里面的东西,可以按照以下方法来处理:

   新建一个文件,名字随你取,必然usrprjConfig.c。然后把prjConfig.c里的内容完全拷贝过来,再把prjConfig.c文件从工 程里remove,把usrprjConfig.c文件add进来。这样你就可以把usrprjConfig.c当作prjConfig.c,并在里面放 心的改了,不用担心重新编译恢复原样了。

不过要注意的是,要做好prjConfig.c的备份,而且在重建工程时要重复以上步骤!

http://blog.chinaunix.net/uid-24194439-id-249852.html

以下是对vx6mkfs.c代码的注释: ``` /* * mkfs.c - file system initialization program */ #include "param.h" #include "buf.h" #include "inode.h" #include "filsys.h" #define NINOBLK (BSIZE/sizeof(struct dinode)) #define NDIRECT (BSIZE/sizeof(struct direct)) struct filsys sblock; /* the file system super block */ int fmod = 0; /* is the file system already modified? */ int fso, fsi; /* file system device file descriptors */ unsigned int fmax; /* number of blocks in file system */ unsigned char *fbuf; /* buffer for file system super block */ /* * main - file system initialization program */ main(argc, argv) int argc; char *argv[]; { register struct dinode *ip; struct direct dp; int n, i, j; daddr_t bn; char filename[50]; /* Open file system device file */ if(argc < 2) { printf("Usage: mkfs filsys\n"); exit(1); } fso = open(argv[1], 1); if(fso < 0) { printf("Can't open %s\n", argv[1]); exit(1); } /* Compute the number of blocks in the file system */ fsi = open(argv[1], 0); fmax = 0; while(read(fsi, fbuf, BSIZE) == BSIZE) fmax++; close(fsi); /* Compute the number of inodes in the file system */ sblock.s_isize = roundup(fmax/16, BSIZE) + 2; sblock.s_fsize = fmax; /* Initialize the super block */ sblock.s_flock = 0; sblock.s_ilock = 0; sblock.s_fmod = 0; sblock.s_ronly = 0; sblock.s_time = 0; sblock.s_tfree = fmax; sblock.s_tinode = sblock.s_isize * NINOBLK; sblock.s_dinfo[0] = 0; sblock.s_dinfo[1] = 0; sblock.s_dinfo[2] = 0; sblock.s_dinfo[3] = 0; sblock.s_dinfo[4] = 0; sblock.s_dinfo[5] = 0; sblock.s_dinfo[6] = 0; sblock.s_dinfo[7] = 0; /* Write the super block to disk */ lseek(fso, SUPERBOFF, 0); write(fso, &sblock, sizeof(sblock)); /* Initialize the inode blocks */ n = sblock.s_isize; ip = (struct dinode *) fbuf; for(i = 2; i < n; i++) { bzero(fbuf, BSIZE); for(j = 0; j < NINOBLK; j++, ip++) { ip->di_mode = 0; ip->di_nlink = 0; ip->di_uid = 0; ip->di_gid = 0; ip->di_size = 0; bn = itod(i) * BSIZE + j * sizeof(struct dinode); lseek(fso, bn, 0); write(fso, ip, sizeof(struct dinode)); } } /* Initialize the root directory */ bzero(fbuf, BSIZE); ip = (struct dinode *) fbuf; ip->di_mode = IFDIR | 0777; ip->di_nlink = 2; ip->di_uid = 0; ip->di_gid = 0; ip->di_size = sizeof(struct direct); ip->di_addr[0] = itod(2); lseek(fso, itod(2) * BSIZE, 0); write(fso, fbuf, BSIZE); /* Add "." and ".." entries to the root directory */ dp.d_ino = 1; strncpy(dp.d_name, ".", DIRSIZ); lseek(fso, itod(2) * BSIZE, 0); write(fso, &dp, sizeof(dp)); dp.d_ino = 1; strncpy(dp.d_name, "..", DIRSIZ); write(fso, &dp, sizeof(dp)); /* Initialize the free block list */ bzero(fbuf, BSIZE); fbuf[0] |= BUSY; for(i = 2; i < fmax; i++) write(fso, fbuf, BSIZE); /* All done */ close(fso); exit(0); } ``` 上面代码的主要作用是: 1. 定义了文件系统超级块结构体 `struct filsys` 和磁盘上的 `inode` 结构体 `struct dinode`。 2. 定义了文件系统初始化工具 `mkfs` 的全局变量,包括文件系统设备文件描述符、文件系统设备文件的块数量、文件系统超级块等。 3. 通过读取命令行参数,打开文件系统设备文件。 4. 计算文件系统的块数量和inode数量,并初始化文件系统的超级块结构体。 5. 将文件系统的超级块写入磁盘,并初始化inode块和根目录。 6. 最后,初始化空闲块链表,写入磁盘,完成文件系统的初始化工作。 总体而言,mkfs.c的作用是初始化vx6文件系统,并在磁盘上创建一个文件系统,以便操作系统可以使用这个文件系统来存储和管理文件和目录等数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值