Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions snippet/CalcInodeBlocksTest/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include <iostream>

#include "defs.h"
#include "util.h"


int main()
{
std::cout << nvmixCalcInodeBlocks(0) << std::endl; // 0
std::cout << nvmixCalcInodeBlocks(1) << std::endl; // 8
std::cout << nvmixCalcInodeBlocks(NVMIX_BLOCK_SIZE - 1) << std::endl; // 8
std::cout << nvmixCalcInodeBlocks(NVMIX_BLOCK_SIZE) << std::endl; // 8
std::cout << nvmixCalcInodeBlocks(NVMIX_BLOCK_SIZE + 1) << std::endl; // 16


return 0;
}
4 changes: 4 additions & 0 deletions snippet/CalcInodeBlocksTest/xmake.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
target ("CalcInodeBlocksTest")
set_kind ("binary")
add_files ("main.cpp")
add_deps ("nvmix-cross-space")
8 changes: 8 additions & 0 deletions src/defs.h → src/cross-space/defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@
#ifndef _NVMIX_DEFS_H_
#define _NVMIX_DEFS_H_

#include "globalmacros.h"


NVMIX_EXTERN_C_BEGIN


/**
* @brief 超级块的逻辑块号。
Expand Down Expand Up @@ -116,4 +121,7 @@ struct NvmixInode
};


NVMIX_EXTERN_C_END


#endif
31 changes: 31 additions & 0 deletions src/cross-space/globalmacros.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* @file globalmacros.h
* @author DavidingPlus (davidingplus@qq.com)
* @brief 全局宏定义头文件。
*
* Copyright (c) 2025 电子科技大学 刘治学
*
*/

#ifndef _NVMIX_GLOBALMACROS_H_
#define _NVMIX_GLOBALMACROS_H_


#ifdef __cplusplus

#define NVMIX_EXTERN_C_BEGIN \
extern "C" \
{

#define NVMIX_EXTERN_C_END }

#else

#define NVMIX_EXTERN_C_BEGIN

#define NVMIX_EXTERN_C_END

#endif


#endif
File renamed without changes.
7 changes: 7 additions & 0 deletions src/util.h → src/cross-space/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@
#ifndef _NVMIX_UTIL_H_
#define _NVMIX_UTIL_H_

#include "globalmacros.h"
#include "defs.h"


NVMIX_EXTERN_C_BEGIN


#define NVMIX_DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d))

// 通过 inode 对应目录项的大小转化为 inode->i_blocks 的值,注意 inode->i_blocks 以 512 B 为单位。
Expand All @@ -24,4 +28,7 @@
unsigned long long nvmixCalcInodeBlocks(long long size);


NVMIX_EXTERN_C_END


#endif
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
71 changes: 36 additions & 35 deletions test/util-test.cpp
Original file line number Diff line number Diff line change
@@ -1,44 +1,45 @@
#include <gtest/gtest.h>

#include "util.h"
#include "defs.h"


TEST(nvmixCalcInodeBlocksTest, Test1)
TEST(UtilTest, NvmixCalcInodeBlocksTest1)
{
EXPECT_EQ(nvmixCalcInodeBlocks(0), 0);
}

// TEST(nvmixCalcInodeBlocksTest, Test2)
// {
// EXPECT_EQ(nvmixCalcInodeBlocks(1), 8); // 1字节需要1个块 -> 4096/512=8
// }

// TEST(nvmixCalcInodeBlocksTest, Test3)
// {
// EXPECT_EQ(nvmixCalcInodeBlocks(4095), 8);
// }

// TEST(nvmixCalcInodeBlocksTest, Test4)
// {
// EXPECT_EQ(nvmixCalcInodeBlocks(4096), 8);
// }

// TEST(nvmixCalcInodeBlocksTest, Test5)
// {
// EXPECT_EQ(nvmixCalcInodeBlocks(4097), 16); // 需要2个块 -> 2*8=16
// }

// TEST(nvmixCalcInodeBlocksTest, Test6)
// {
// EXPECT_EQ(nvmixCalcInodeBlocks(3 * 4096), 24); // 3块 -> 3*8=24
// }

// TEST(nvmixCalcInodeBlocksTest, Test7)
// {
// EXPECT_EQ(nvmixCalcInodeBlocks(3 * 4096 - 1), 24);
// }

// TEST(nvmixCalcInodeBlocksTest, Test8)
// {
// EXPECT_EQ(nvmixCalcInodeBlocks(100 * 4096), 800); // 100块 -> 100*8=800
// }
TEST(UtilTest, NvmixCalcInodeBlocksTest2)
{
EXPECT_EQ(nvmixCalcInodeBlocks(1), 8);
}

TEST(UtilTest, NvmixCalcInodeBlocksTest3)
{
EXPECT_EQ(nvmixCalcInodeBlocks(NVMIX_BLOCK_SIZE - 1), 8);
}

TEST(UtilTest, NvmixCalcInodeBlocksTest4)
{
EXPECT_EQ(nvmixCalcInodeBlocks(NVMIX_BLOCK_SIZE), 8);
}

TEST(UtilTest, NvmixCalcInodeBlocksTest5)
{
EXPECT_EQ(nvmixCalcInodeBlocks(NVMIX_BLOCK_SIZE + 1), 16);
}

TEST(UtilTest, NvmixCalcInodeBlocksTest6)
{
EXPECT_EQ(nvmixCalcInodeBlocks(3 * NVMIX_BLOCK_SIZE), 24);
}

TEST(UtilTest, NvmixCalcInodeBlocksTest7)
{
EXPECT_EQ(nvmixCalcInodeBlocks(3 * NVMIX_BLOCK_SIZE - 1), 24);
}

TEST(UtilTest, NvmixCalcInodeBlocksTest8)
{
EXPECT_EQ(nvmixCalcInodeBlocks(100 * NVMIX_BLOCK_SIZE), 800);
}
2 changes: 2 additions & 0 deletions test/xmake.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@ target("tests")

set_default (false) -- 类似 CMake 中的 EXCLUDE_FROM_ALL。默认不构建,需要显式指定才会构建。
set_targetdir ("$(buildir)/$(plat)/$(arch)/$(mode)/test/")

add_deps ("nvmix-cross-space")
12 changes: 10 additions & 2 deletions xmake.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,25 @@ option ("linux-headers", {showmenu = true, description = "Set linux-headers path
option ("with-gtest", {showmenu = true, description = "Whether to enable unit test by GTest.", default = false})


add_includedirs ("src/")
add_includedirs ("src/cross-space/")
add_includedirs ("src/kernel/")

target ("nvmixfs")
add_rules ("platform.linux.module")
add_files ("src/*.c")
add_files ("src/kernel/*.c")
add_files ("src/cross-space/*.c")
set_values ("linux.driver.linux-headers", "$(linux-headers)")
set_languages ("gnu99")
add_cflags ("-O1")

set_targetdir ("$(buildir)/$(plat)/$(arch)/$(mode)/bin/")

target ("nvmix-cross-space")
set_kind ("shared")
add_files ("src/cross-space/*.c")

set_targetdir ("$(buildir)/$(plat)/$(arch)/$(mode)/bin/")


includes ("snippet")

Expand Down