fix a FAT32 bug
This commit is contained in:
parent
d2d2aa7916
commit
7172563512
6
Makefile
6
Makefile
|
@ -127,7 +127,7 @@ QEMUOPTS = -machine virt -bios $(RUSTSBI) -kernel $T/kernel -m 128M -smp $(CPUS)
|
|||
QEMUOPTS += -drive file=fs.img,if=none,format=raw,id=x0
|
||||
QEMUOPTS += -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0
|
||||
|
||||
run: build
|
||||
run: build fs.img
|
||||
ifeq ($(platform), k210)
|
||||
@$(OBJCOPY) $T/kernel --strip-all -O binary $(image)
|
||||
@$(OBJCOPY) $(RUSTSBI) --strip-all -O binary $(k210)
|
||||
|
@ -136,10 +136,12 @@ ifeq ($(platform), k210)
|
|||
@sudo chmod 777 $(k210-serialport)
|
||||
@python3 ./tools/kflash.py -p $(k210-serialport) -b 1500000 -t $(k210)
|
||||
else
|
||||
@./fs.sh
|
||||
@$(QEMU) $(QEMUOPTS)
|
||||
endif
|
||||
|
||||
fs.img: $(UPROGS)
|
||||
@./fs.sh
|
||||
|
||||
$U/initcode: $U/initcode.S
|
||||
$(CC) $(CFLAGS) -march=rv64g -nostdinc -I. -Ikernel -c $U/initcode.S -o $U/initcode.o
|
||||
$(LD) $(LDFLAGS) -N -e start -Ttext 0 -o $U/initcode.out $U/initcode.o
|
||||
|
|
28
fs.sh
28
fs.sh
|
@ -1,18 +1,20 @@
|
|||
dd if=/dev/zero of=fs.img bs=512k count=2048
|
||||
mkfs.vfat -F 32 fs.img
|
||||
if [ ! -f "fs.img" ]; then
|
||||
dd if=/dev/zero of=fs.img bs=512k count=2048
|
||||
mkfs.vfat -F 32 fs.img
|
||||
fi
|
||||
|
||||
sudo mount fs.img /mnt
|
||||
sudo mkdir /mnt/xv6sh
|
||||
sudo mkdir /mnt/bin
|
||||
sudo cp ./xv6-user/_init /mnt/init
|
||||
sudo cp ./xv6-user/_sh /mnt/sh
|
||||
sudo cp ./xv6-user/_cat /mnt/xv6sh/cat
|
||||
sudo cp ./xv6-user/_echo /mnt/xv6sh/echo
|
||||
sudo cp ./xv6-user/_grep /mnt/xv6sh/grep
|
||||
sudo cp ./xv6-user/_ls /mnt/xv6sh/ls
|
||||
sudo cp ./xv6-user/_kill /mnt/xv6sh/kill
|
||||
sudo cp ./xv6-user/_mkdir /mnt/xv6sh/mkdir
|
||||
sudo cp ./xv6-user/_xargs /mnt/xv6sh/xargs
|
||||
sudo cp ./xv6-user/_rm /mnt/xv6sh/rm
|
||||
sudo cp ./xv6-user/_sleep /mnt/xv6sh/sleep
|
||||
sudo cp ./xv6-user/_find /mnt/xv6sh/find
|
||||
sudo cp ./xv6-user/_cat /mnt/bin/cat
|
||||
sudo cp ./xv6-user/_echo /mnt/bin/echo
|
||||
sudo cp ./xv6-user/_grep /mnt/bin/grep
|
||||
sudo cp ./xv6-user/_ls /mnt/bin/ls
|
||||
sudo cp ./xv6-user/_kill /mnt/bin/kill
|
||||
sudo cp ./xv6-user/_mkdir /mnt/bin/mkdir
|
||||
sudo cp ./xv6-user/_xargs /mnt/bin/xargs
|
||||
sudo cp ./xv6-user/_rm /mnt/bin/rm
|
||||
sudo cp ./xv6-user/_sleep /mnt/bin/sleep
|
||||
sudo cp ./xv6-user/_find /mnt/bin/find
|
||||
sudo umount /mnt
|
||||
|
|
|
@ -450,7 +450,7 @@ struct dirent *edup(struct dirent *entry)
|
|||
return entry;
|
||||
}
|
||||
|
||||
// Only update filesize in this case.
|
||||
// Only update filesize and first cluster in this case.
|
||||
void eupdate(struct dirent *entry)
|
||||
{
|
||||
if (!entry->dirty) { return; }
|
||||
|
@ -459,6 +459,10 @@ void eupdate(struct dirent *entry)
|
|||
rw_clus(entry->parent->cur_clus, 0, 0, (uint64) &entcnt, off, 1);
|
||||
entcnt &= ~LAST_LONG_ENTRY;
|
||||
off = reloc_clus(entry->parent, entry->off + (entcnt << 5), 0);
|
||||
uint16 clus_high = (uint16)(entry->first_clus >> 16);
|
||||
uint16 clus_low = (uint16)(entry->first_clus & 0xff);
|
||||
rw_clus(entry->parent->cur_clus, 1, 0, (uint64) &clus_high, off + 20, sizeof(uint16));
|
||||
rw_clus(entry->parent->cur_clus, 1, 0, (uint64) &clus_low, off + 26, sizeof(uint16));
|
||||
rw_clus(entry->parent->cur_clus, 1, 0, (uint64) &entry->file_size, off + 28, sizeof(entry->file_size));
|
||||
entry->dirty = 0;
|
||||
}
|
||||
|
|
|
@ -217,7 +217,7 @@ main(void)
|
|||
|
||||
// Add an embedded env var(for basic commands in shell)
|
||||
strcpy(envs[nenv].name, "SHELL");
|
||||
strcpy(envs[nenv].value, "/xv6sh");
|
||||
strcpy(envs[nenv].value, "/bin");
|
||||
nenv++;
|
||||
|
||||
getcwd(mycwd);
|
||||
|
|
Loading…
Reference in New Issue