-
Notifications
You must be signed in to change notification settings - Fork 1
Development #167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Development #167
Conversation
|
Caution Review failedThe pull request is closed. WalkthroughThis PR adds a crypto module (xoroshiro128+ RNG, CRC32, SHA‑256), new headers, and CMake updates to include crypto and fs/devfs. It introduces a CharDevice registry and DevFS implementation mounted at /Devices, and wires the Serial driver to register as a char device. CRC32Init is invoked in kernel bootstrap; A20Test and its calls were removed. docs/ROADMAP.md was deleted, and a README link line and toolchain path were adjusted. Poem
Pre-merge checks❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: ASSERTIVE Plan: Pro 📒 Files selected for processing (6)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 27
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
kernel/core/Kernel.c (1)
383-397: Move CharDeviceInit() to PXS1 before SerialInit(), and remove duplicate initialization from VFS.c.The verification confirms the issue:
SerialInit()(called in PXS1 at line 386) registers the serial device viaCharDeviceRegister()at drivers/Serial.c:75, butCharDeviceInit()is currently only called later in VfsInit() (fs/VFS.c:69), clearing the registry after registration. Initialize the registry first in PXS1, then remove it from VFS.Apply the diffs as proposed:
--- a/kernel/core/Kernel.c +++ b/kernel/core/Kernel.c @@ -383,6 +383,8 @@ void PXS1(const uint32_t info) { PICMaskAll(); + // Initialize char device registry before drivers register + CharDeviceInit(); int sret = SerialInit();--- a/fs/VFS.c +++ b/fs/VFS.c @@ -69 +69 @@ - CharDeviceInit(); - PrintKernel("VFS: Char device subsystem initialized\n");fs/VFS.c (1)
359-369: AddFat1xSetActive()call and replace size check with proper file-type validation.Lines 361 missing the required
Fat1xSetActive(mount->device)call (present in all other FAT1x operations: lines 162, 195, 226, 253, 281, 306, 333, 386). Additionally,Fat1xGetFileSize(local_path) > 0fails for zero-length files—VfsCopyFile (line 448) creates them, so they're valid. SinceFat1xIsFile()doesn't exist, either implement it followingFat1xIsDirectory()pattern or check file type directly, matching EXT2/NTFS behavior.if (mount->fs_driver) { if (FastStrCmp(mount->fs_driver->name, "FAT1x") == 0) { Fat1xSetActive(mount->device); return Fat1xIsFile(local_path); // Use proper file check, not size > 0 } else if (FastStrCmp(mount->fs_driver->name, "EXT2") == 0) {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (16)
README.md(0 hunks)cmake/source.cmake(5 hunks)crypto/CRC32.c(1 hunks)crypto/CRC32.h(1 hunks)crypto/RNG.c(1 hunks)crypto/RNG.h(1 hunks)crypto/SHA256.c(1 hunks)crypto/SHA256.h(1 hunks)docs/ROADMAP.md(0 hunks)drivers/Serial.c(2 hunks)fs/CharDevice.c(1 hunks)fs/CharDevice.h(1 hunks)fs/VFS.c(7 hunks)fs/devfs/DevFS.c(1 hunks)fs/devfs/DevFS.h(1 hunks)kernel/core/Kernel.c(2 hunks)
💤 Files with no reviewable changes (2)
- README.md
- docs/ROADMAP.md
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-01T02:35:28.353Z
Learnt from: assembler-0
PR: assembler-0/VoidFrame#103
File: fs/VFS.c:331-335
Timestamp: 2025-09-01T02:35:28.353Z
Learning: VfsIsFile function was initially implemented as a placeholder that only checked for mount existence. The proper implementation should follow the same pattern as VfsIsDir: find mount, strip mount path, then use filesystem-specific functions to check if the path points to a file (FS_FILE for RAMFS, Fat12 functions for FAT12).
Applied to files:
fs/VFS.c
🧬 Code graph analysis (12)
fs/CharDevice.c (1)
kernel/etc/StringOps.c (1)
FastStrCmp(39-49)
drivers/Serial.c (1)
fs/CharDevice.c (1)
CharDeviceRegister(14-20)
fs/devfs/DevFS.c (2)
fs/CharDevice.c (3)
CharDeviceFind(22-29)CharDeviceGetCount(38-40)CharDeviceGet(31-36)kernel/etc/StringOps.c (1)
FastStrCmp(39-49)
fs/VFS.c (6)
fs/CharDevice.c (1)
CharDeviceInit(7-12)kernel/etc/Console.c (1)
PrintKernel(198-211)fs/devfs/DevFS.c (5)
DevfsMount(6-11)DevfsReadFile(13-22)DevfsWriteFile(24-31)DevfsListDir(33-48)DevfsIsDir(50-56)fs/FileSystem.c (1)
FileSystemRegister(13-22)drivers/Serial.c (1)
SerialWrite(165-174)kernel/etc/StringOps.c (1)
FastStrCmp(39-49)
crypto/CRC32.h (1)
crypto/CRC32.c (2)
CRC32(20-35)CRC32Init(5-18)
fs/devfs/DevFS.h (1)
fs/devfs/DevFS.c (5)
DevfsMount(6-11)DevfsReadFile(13-22)DevfsWriteFile(24-31)DevfsListDir(33-48)DevfsIsDir(50-56)
crypto/RNG.c (1)
include/Io.c (1)
cpuid(25-29)
crypto/SHA256.c (1)
mm/MemOps.c (1)
FastMemset(34-49)
fs/CharDevice.h (1)
fs/CharDevice.c (5)
CharDeviceInit(7-12)CharDeviceRegister(14-20)CharDeviceFind(22-29)CharDeviceGet(31-36)CharDeviceGetCount(38-40)
crypto/SHA256.h (1)
crypto/SHA256.c (2)
SHA256Update(78-88)SHA256Final(90-124)
crypto/RNG.h (1)
crypto/RNG.c (6)
rng_seed(20-23)xoroshiro128plus(10-18)rdrand_supported(25-29)rdrand16(31-35)rdrand32(37-41)rdrand64(43-47)
kernel/core/Kernel.c (2)
kernel/etc/Console.c (2)
PrintKernel(198-211)PrintKernelSuccess(225-230)crypto/CRC32.c (1)
CRC32Init(5-18)
🪛 Clang (14.0.6)
crypto/CRC32.c
[warning] 3-3: variable 'crc32_table' is non-const and globally accessible, consider making it const
(cppcoreguidelines-avoid-non-const-global-variables)
[warning] 20-20: parameter 'data' is unused
(misc-unused-parameters)
[warning] 20-20: parameter 'length' is unused
(misc-unused-parameters)
[warning] 28-28: variable 'p' is not initialized
(cppcoreguidelines-init-variables)
[warning] 28-28: variable name 'p' is too short, expected at least 3 characters
(readability-identifier-length)
fs/CharDevice.c
[warning] 4-4: variable 'g_char_devices' is non-const and globally accessible, consider making it const
(cppcoreguidelines-avoid-non-const-global-variables)
[warning] 5-5: variable 'g_num_char_devices' is non-const and globally accessible, consider making it const
(cppcoreguidelines-avoid-non-const-global-variables)
drivers/Serial.c
[warning] 41-41: parameter 'dev' is unused
(misc-unused-parameters)
[warning] 41-41: parameter 'size' is unused
(misc-unused-parameters)
[warning] 42-42: statement should be inside braces
(readability-braces-around-statements)
[warning] 46-46: variable name 'c' is too short, expected at least 3 characters
(readability-identifier-length)
[warning] 55-55: parameter 'dev' is unused
(misc-unused-parameters)
[warning] 55-55: parameter 'size' is unused
(misc-unused-parameters)
[warning] 56-56: statement should be inside braces
(readability-braces-around-statements)
[warning] 66-66: variable 'g_serial_device' is non-const and globally accessible, consider making it const
(cppcoreguidelines-avoid-non-const-global-variables)
[warning] 73-73: variable 'result' is not initialized
(cppcoreguidelines-init-variables)
fs/devfs/DevFS.c
[warning] 13-13: parameter 'max_size' is unused
(misc-unused-parameters)
[warning] 24-24: parameter 'size' is unused
(misc-unused-parameters)
fs/VFS.c
[warning] 86-86: variable 'result' is not initialized
(cppcoreguidelines-init-variables)
crypto/CRC32.h
[error] 4-4: 'stdint.h' file not found
(clang-diagnostic-error)
crypto/RNG.c
[warning] 4-4: variable 's' is non-const and globally accessible, consider making it const
(cppcoreguidelines-avoid-non-const-global-variables)
[warning] 4-4: variable name 's' is too short, expected at least 3 characters
(readability-identifier-length)
[warning] 20-20: 2 adjacent parameters of 'rng_seed' of similar type ('int') are easily swapped by mistake
(bugprone-easily-swappable-parameters)
[note] 20-20: the first parameter in the range is 'a'
(clang)
[note] 20-20: the last parameter in the range is 'b'
(clang)
[warning] 20-20: parameter name 'a' is too short, expected at least 3 characters
(readability-identifier-length)
[warning] 20-20: parameter name 'b' is too short, expected at least 3 characters
(readability-identifier-length)
[warning] 26-26: multiple declarations in a single statement reduces readability
(readability-isolate-declaration)
[warning] 26-26: variable 'eax' is not initialized
(cppcoreguidelines-init-variables)
[warning] 26-26: variable 'ebx' is not initialized
(cppcoreguidelines-init-variables)
[warning] 26-26: variable 'ecx' is not initialized
(cppcoreguidelines-init-variables)
[warning] 26-26: variable 'edx' is not initialized
(cppcoreguidelines-init-variables)
[warning] 28-28: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined
(bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions)
[warning] 28-28: 30 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
crypto/SHA256.c
[warning] 13-13: variable name 'k' is too short, expected at least 3 characters
(readability-identifier-length)
[warning] 68-68: 0x6a09e667 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 69-69: 0xbb67ae85 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 70-70: 0x3c6ef372 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 71-71: 0xa54ff53a is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 72-72: 0x510e527f is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 73-73: 5 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 73-73: 0x9b05688c is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 74-74: 6 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 74-74: 0x1f83d9ab is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 75-75: 7 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 75-75: 0x5be0cd19 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 90-90: parameter 'hash' is unused
(misc-unused-parameters)
[warning] 95-95: 56 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 100-100: 56 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 103-103: 8 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 104-104: 63 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 105-105: 62 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 105-105: 8 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 106-106: 61 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 106-106: 16 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 107-107: 60 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 107-107: 24 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 108-108: 59 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 108-108: 32 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 109-109: 58 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 109-109: 40 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 110-110: 57 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 110-110: 48 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 111-111: 56 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
[warning] 111-111: 56 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
fs/CharDevice.h
[error] 4-4: 'stdint.h' file not found
(clang-diagnostic-error)
[warning] 15-15: 32 is a magic number; consider replacing it with a named constant
(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
crypto/SHA256.h
[error] 4-4: 'stdint.h' file not found
(clang-diagnostic-error)
crypto/RNG.h
[error] 3-3: 'stdint.h' file not found
(clang-diagnostic-error)
[warning] 5-5: parameter name 'a' is too short, expected at least 3 characters
(readability-identifier-length)
[warning] 5-5: parameter name 'b' is too short, expected at least 3 characters
(readability-identifier-length)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (14)
crypto/SHA256.c (1)
65-76: SHA‑256 implementation looks soundRounds, padding, and output formatting are standard. No functional issues spotted.
Also applies to: 78-88, 90-124
fs/VFS.c (6)
82-85: DevFS driver registration: LGTM.Driver is registered once and name string matches router checks.
91-95: Mount /Devices: good; ensure mkdir and mount order.Mount after root is fine. This relies on CharDeviceInit being done earlier (see prior comment).
170-172: Routing read to DevFS: LGTM.Dispatch correctly strips mount and forwards to DevfsReadFile.
203-205: Routing write to DevFS: LGTM.Matches DevfsWriteFile signature.
235-236: Routing list to DevFS: LGTM.Returns DevfsListDir for
/Devices.
341-343:VfsIsDirDevFS branch: LGTM.Correctly delegates to
DevfsIsDir.cmake/source.cmake (1)
79-81: Build integration for DevFS and crypto: LGTM.Sources and include dirs are correctly wired;
${CRYPTO_SOURCES}added to final list. No issues spotted.Also applies to: 127-131, 176-176, 193-194, 222-222
fs/CharDevice.c (3)
7-12: LGTM!The initialization logic correctly clears the registry and resets the count.
31-36: LGTM!Proper bounds checking and clean implementation.
38-40: LGTM!Simple getter with correct implementation.
fs/devfs/DevFS.h (1)
1-15: LGTM!Clean header declarations with appropriate include guards and helpful comments explaining the virtual filesystem nature.
fs/devfs/DevFS.c (1)
6-11: LGTM!Appropriate no-op implementation for a virtual filesystem with proper handling of unused parameters.
fs/CharDevice.h (1)
20-24: LGTM!Clean API declarations that are well-structured and consistent.
Chardevice and DEVFS
Summary by CodeRabbit
New Features
Documentation