diff --git a/kernel/src/driver/tty/tty_device.rs b/kernel/src/driver/tty/tty_device.rs index f5c534a7..ab1f26de 100644 --- a/kernel/src/driver/tty/tty_device.rs +++ b/kernel/src/driver/tty/tty_device.rs @@ -197,18 +197,35 @@ impl IndexNode for TtyDevice { self.check_rw_param(len, buf)?; + let mut cnt: usize = 0; // 根据当前文件是stdout还是stderr,选择不同的发送方式 let r: Result = if data.flags.contains(TtyFileFlag::STDOUT) { - self.core.stdout(&buf[0..len], true) + loop { + let r = self.core.stdout(&buf[cnt..len], false); + if let Err(TtyError::BufferFull(c)) = r { + self.sync().expect("Failed to sync tty device!"); + cnt += c; + } else { + break r; + } + } } else if data.flags.contains(TtyFileFlag::STDERR) { - self.core.stderr(&buf[0..len], true) + loop { + let r = self.core.stderr(&buf[cnt..len], false); + if let Err(TtyError::BufferFull(c)) = r { + self.sync().expect("Failed to sync tty device!"); + cnt += c; + } else { + break r; + } + } } else { return Err(SystemError::EPERM); }; if r.is_ok() { self.sync().expect("Failed to sync tty device!"); - return Ok(r.unwrap()); + return Ok(cnt + r.unwrap()); } let r: TtyError = r.unwrap_err(); diff --git a/kernel/src/process/mod.rs b/kernel/src/process/mod.rs index f3008d69..cd17a8a8 100644 --- a/kernel/src/process/mod.rs +++ b/kernel/src/process/mod.rs @@ -823,8 +823,8 @@ impl ProcessControlBlock { pub fn generate_name(program_path: &str, args: &Vec) -> String { let mut name = program_path.to_string(); for arg in args { - name.push_str(arg); name.push(' '); + name.push_str(arg); } return name; } diff --git a/tools/write_disk_image.sh b/tools/write_disk_image.sh index addcc79b..6f112a78 100644 --- a/tools/write_disk_image.sh +++ b/tools/write_disk_image.sh @@ -74,7 +74,7 @@ if [ ! -f "${root_folder}/bin/${DISK_NAME}" ]; then --bios) case "$2" in uefi) - sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #GPT分区 + sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #GPT分区 用GPT分区uefi启动不了 内核没有针对gpt分区表来做处理 ;; legacy) sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #MBR分区