Explorar o código

:art: 解决一些隐式类型转换问题

fslongjin %!s(int64=3) %!d(string=hai) anos
pai
achega
6aede7ccc7

+ 1 - 1
kernel/common/printk.c

@@ -33,7 +33,7 @@ int init_printk(const int char_size_x, const int char_size_y)
     pos.max_y = calculate_max_charNum(pos.height, char_size_y);
 
     // @todo:将来需要将帧缓冲区物理地址填写到这个地址的页表项中
-    pos.FB_address = 0xa00000;
+    pos.FB_address = (unsigned int*)0xa00000;
     pos.FB_length = pos.width * pos.height;
 
     pos.x = 0;

+ 7 - 6
kernel/driver/multiboot2/multiboot2.c

@@ -17,8 +17,8 @@ bool multiboot2_init(void)
     return true;
 }
 
-void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, int *),
-                     void *data, int *count)
+void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, unsigned int *),
+                     void *data, unsigned int *count)
 {
     uintptr_t addr = boot_info_addr;
     // 下一字节开始为 tag 信息
@@ -52,20 +52,21 @@ void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, int *),
  * @return true
  * @return false
  */
-bool multiboot2_get_memory(const struct iter_data_t *_iter_data, void *data, int *count)
+bool multiboot2_get_memory(const struct iter_data_t *_iter_data, void *data, unsigned int *count)
 {
     if (_iter_data->type != MULTIBOOT_TAG_TYPE_MMAP)
         return false;
 
     struct multiboot_mmap_entry_t *resource = (struct multiboot_mmap_entry_t *)data;
     struct multiboot_mmap_entry_t *mmap = ((struct multiboot_tag_mmap_t *)_iter_data)->entries;
-    *count = (uint8_t *)_iter_data + _iter_data->size;
+    *count = 0;
     for (; (uint8_t *)mmap < (uint8_t *)_iter_data + _iter_data->size;
          mmap = (struct multiboot_mmap_entry_t *)((uint8_t *)mmap + ((struct multiboot_tag_mmap_t *)_iter_data)->entry_size))
     {
         *resource = *mmap;
         // 将指针进行增加
         resource = (struct multiboot_mmap_entry_t *)((uint8_t *)resource + ((struct multiboot_tag_mmap_t *)_iter_data)->entry_size);
+        ++(*count);
     }
     return true;
 }
@@ -76,7 +77,7 @@ bool multiboot2_get_memory(const struct iter_data_t *_iter_data, void *data, int
  * @param _iter_data 要被迭代的信息的结构体
  * @param _data 返回信息的结构体指针
  */
-bool multiboot2_get_VBE_info(const struct iter_data_t *_iter_data, void *data, int *reserved)
+bool multiboot2_get_VBE_info(const struct iter_data_t *_iter_data, void *data, unsigned int *reserved)
 {
     
     if (_iter_data->type != MULTIBOOT_TAG_TYPE_VBE)
@@ -91,7 +92,7 @@ bool multiboot2_get_VBE_info(const struct iter_data_t *_iter_data, void *data, i
  * @param _iter_data 要被迭代的信息的结构体
  * @param _data 返回信息的结构体指针
  */
-bool multiboot2_get_Framebuffer_info(const struct iter_data_t *_iter_data, void *data, int *reserved)
+bool multiboot2_get_Framebuffer_info(const struct iter_data_t *_iter_data, void *data, unsigned int *reserved)
 {
     if(_iter_data->type !=MULTIBOOT_TAG_TYPE_FRAMEBUFFER)
         return false;

+ 5 - 5
kernel/driver/multiboot2/multiboot2.h

@@ -419,8 +419,8 @@ static bool multiboot2_init(void);
  * @param  _fun            迭代操作
  * @param  _data           数据
  */
-void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, int *),
-                            void *_data, int *count);
+void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, unsigned int *),
+                            void *_data, unsigned int *count);
 
 /**
  * @brief 获取multiboot2协议提供的内存区域信息
@@ -431,7 +431,7 @@ void multiboot2_iter(bool (*_fun)(const struct iter_data_t *, void *, int *),
  * @return true
  * @return false
  */
-bool multiboot2_get_memory(const struct iter_data_t *_iter_data, void *_data, int *count);
+bool multiboot2_get_memory(const struct iter_data_t *_iter_data, void *_data, unsigned int *count);
 
 /**
  * @brief 获取VBE信息
@@ -439,7 +439,7 @@ bool multiboot2_get_memory(const struct iter_data_t *_iter_data, void *_data, in
  * @param _iter_data 要被迭代的信息的结构体
  * @param _data 返回信息的结构体指针
  */
-bool multiboot2_get_VBE_info(const struct iter_data_t *_iter_data, void *_data, int *reserved);
+bool multiboot2_get_VBE_info(const struct iter_data_t *_iter_data, void *_data, unsigned int *reserved);
 
 /**
  * @brief 获取帧缓冲区信息
@@ -447,4 +447,4 @@ bool multiboot2_get_VBE_info(const struct iter_data_t *_iter_data, void *_data,
  * @param _iter_data 要被迭代的信息的结构体
  * @param _data 返回信息的结构体指针
  */
-bool multiboot2_get_Framebuffer_info(const struct iter_data_t *_iter_data, void *_data, int *reserved);
+bool multiboot2_get_Framebuffer_info(const struct iter_data_t *_iter_data, void *_data, unsigned int *reserved);

+ 0 - 2
kernel/main.c

@@ -85,8 +85,6 @@ void system_initialize()
     // 先初始化系统调用模块
     syscall_init();
 
-    while(1);
-
     // 再初始化进程模块。顺序不能调转
     process_init();
 }