📄 fs_misc.cpp
字号:
#include <stdlib.h>
//#include "../lib/lib.h"
#include "../jffs/jffstypes.h"
#include "../jffs/fs.h"
unsigned long CURRENT_TIME; /*TODO*/
struct inode I_RAM;
extern struct inode I_ROOT;
extern struct inode I_FLASH;
extern struct inode I_FTU_PARA;
extern struct inode I_YC_PARA;
extern struct file files_fd[NR_OPEN]; /*静态分配空间*/
extern struct inode files_inode[NR_OPEN];
extern fd_set files_open_fds;
struct fs_struct current_fs;
int flash_init(void);
int init_jffs_fs(void);
int init_root(void);
int init_para_fs(void);
int para_list_init(void);
int init_fs(void)
{
int i;
for(i=0;i<NR_OPEN;i++)
files_fd[i].f_inode = &files_inode[i]; /*!!!*/
FD_SET(0, &files_open_fds);
flash_init();
init_jffs_fs();
current_fs.root = &I_FLASH;
return 0;
}
/*来自asm-68knomem -> bitops.h*/
/* find_next_zero_bit() finds the first zero bit in a bit string of length
* 'size' bits, starting the search at bit 'offset'. This is largely based
* on Linus's ALPHA routines, which are pretty portable BTW.
*/
unsigned long ffz(unsigned long word)
{
unsigned long result = 0;
while(word & 1) {
result++;
word >>= 1;
}
return result;
}
unsigned long find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
{
unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
unsigned long result = offset & ~31UL;
unsigned long tmp;
unsigned long temp;
if (offset >= size)
return size;
size -= result;
offset &= 31UL;
if (offset) {
tmp = *(p++);
tmp |= ~0UL >> (32-offset);
if (size < 32)
goto found_first;
if (~tmp)
goto found_middle;
size -= 32;
result += 32;
}
while (size & ~31UL) {
if (~(tmp = *(p++)))
goto found_middle;
result += 32;
size -= 32;
}
if (!size)
return result;
tmp = *p;
temp = ~0UL; /*可能因为高低字节不同*/
found_first:
tmp |= temp << size; /*???*/
found_middle:
return result + ffz(tmp);
}
void kfree( void *p )
{
free(p);
}
void *kmalloc(unsigned long size, char x)
{
return malloc(size);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -