372 Star 2K Fork 502

WeHarmony / kernel_liteos_a_note

 / 详情

建议 增加索引

待办的
创建于  
2021-08-15 23:46

有时候打开文件太多, 关了之后,又发现某些要查看的函数文件不见了, 又要从头找起 ,好麻烦 :joy:

提个小建议:
能否增加个索引文件, 如图----> 把启动流程, 重要的函数声明集中在一起, 这样浏览时能快速跳转,找到某些函数

再比如文件系统, 可以把某些重要函数声明分类集中在一起 , 方便阅读, 指引阅读


总之, 把藏得很深的函数, 都集中起来, 按功能排列,或按启动流程排列 ,指引阅读

输入图片说明

比如下面这些,图中的 , 只有有定义, 都可以直接跳转

#include "los_config.h"
#include "gic_common.h"
#include "los_arch_mmu.h"
#include "los_atomic.h"
#include "los_init_pri.h"
#include "los_printf.h"
#include "los_process_pri.h"
#include "los_sched_pri.h"
#include "los_swtmr_pri.h"
#include "los_task_pri.h"

extern INT32 OsMain(VOID);
extern VOID  OsSchedStart(VOID);

//核间中断==================================================================
extern VOID OsMpWakeHandler(VOID)     ;//     唤醒CPU
extern VOID OsMpScheduleHandler(VOID)  ;//    调度CPU    
extern VOID OsMpScheduleHandler(VOID)   ;//    停止CPU   让当前Cpu停止工作
//系统滴答中断
extern VOID OsTickHandler(VOID)        ;//    系统滴答中断
        extern INLINE BOOL OsSchedScanTimerList(VOID);
        extern VOID OsSwtmrScan(VOID);

//内核初始化顺序===============================================================

extern UINT32 EarliestInit(VOID);
#define LOS_INIT_LEVEL_EARLIEST          0	//最早级
        extern UINT32 OsTraceInit(void);
        extern UINT32 OsLkLoggerInit(VOID);
        extern UINT32 OsDmesgInit(VOID);      //开机信息

extern UINT32 ArchEarlyInit(VOID);         //中断相关
        extern VOID OsHwiInit(VOID);
        extern VOID OsExcInit(VOID);  //异常接管
        extern UINT32 OsTickInit(UINT32 systemClock, UINT32 tickPerSecond);  //内核定时器  系统滴答
#define LOS_INIT_LEVEL_ARCH_EARLY        1	//架构早期

extern UINT32 PlatformEarlyInit(VOID); //串口中断
        extern void uart_init(void);
#define LOS_INIT_LEVEL_PLATFORM_EARLY    2	//平台早期

extern VOID OsSystemInfo(VOID); //cpu软件和硬件信息
extern UINT32 OsTaskInit(VOID); //任务池 调度器 cpu私有变量
#define LOS_INIT_LEVEL_KMOD_PREVM        3	//内存模块即将开始

extern UINT32 OsSysMemInit(VOID);//内存初始化
#define LOS_INIT_LEVEL_VM_COMPLETE       4	//内存模块完成
        extern UINT32 ShmInit(VOID);

extern UINT32 OsIpcInit(VOID);
extern UINT32 OsSystemProcessCreate(VOID);//进程池
extern UINT32 ArchInit(VOID);
#define LOS_INIT_LEVEL_ARCH              5	//架构级
        extern int OsBBoxDriverInit(void);

extern UINT32 PlatformInit(VOID);
#define LOS_INIT_LEVEL_PLATFORM          6	//平台级
        extern int OsBBoxSystemAdapterInit(void);

extern UINT32 KModInit(VOID);
    extern UINT32 OsSwtmrInit(VOID);
#define LOS_INIT_LEVEL_KMOD_BASIC        7	//基础级
        extern VOID los_vfs_init(VOID);   //虚拟文件系统  根文件系统

#define LOS_INIT_LEVEL_KMOD_EXTENDED     8	//扩展级
        extern void ProcFsInit(void);
               extern int mkdir(const char );
        extern UINT32 OsFutexInit(VOID);
        extern int OsHiLogDriverInit(VOID);
        extern int OsHiDumperDriverInit(void);
        extern UINT32 OsCpupInit(VOID);
        extern UINT32 OsLiteIpcInit(VOID);
        extern UINT32 OsPmInit(VOID);
        extern UINT32 OsVdsoInit(VOID);
        extern VOID OsSyscallHandleInit(VOID);

extern VOID release_secondary_cores(VOID);
#define LOS_INIT_LEVEL_KMOD_TASK          9	 //任务级
        extern UINT32 OsResourceFreeTaskCreate(VOID);
        extern UINT32 OsMpInit(VOID);
        extern UINT32 OomTaskInit(VOID);
        extern UINT32 OsCpupGuardCreator(VOID);
        extern UINT32 OsSystemInit(VOID);
                    extern mem_dev_register();
                    extern net_init();
                    extern DeviceMannagerStart();
                    extern INT32 OsMountRootfs(VOID);;                //挂载根文件系统
 
                        extern int VnodeLookup(const char *path, struct Vnode **vnode, uint32_t flags);
                     
                         extern INT32 add_mtd_partition(const CHAR *type, UINT32 startAddr, UINT32 length, UINT32 partitionNum) ;
                               extern static INT32 BlockDriverRegisterOperate(mtd_partition *newNode, const partition_param *param, UINT32 partitionNum);
                                         extern int register_blockdriver(const char *path,const struct block_operations *bops,mode_t mode, void *priv);
                                
                               extern static INT32 CharDriverRegisterOperate(mtd_partition *newNode,const partition_param *param, UINT32 partitionNum);
                                          extern int register_driver(const char *path,const struct file_operations_vfs *fops, mode_t mode,void *priv);

                    extern INT32 virtual_serial_init(const CHAR *deviceName);
                    extern system_console_init(const CHAR *deviceName);
                    extern UINT32 OsUserInitProcess(VOID); //启动第一个应用程序 
                                  extern VOID OsUserInit(VOID *args);  //根据 ld 地址地址 拷贝后启动 
                                        sys_call3(__NR_execve, (UINTPTR)g_initPath, 0, 0);
                                        //触发软中断
                                        _osExceptSwiHdl(); //  R7 保持系统调用号 = __NR_execve       R0 R1 R2 依次保持后面三个参数
                                        extern VOID OsArmA32SyscallHandle(TaskContext *regs) ;
                                        extern int SysExecve(regs->R0, regs->R1, regs->R2);
                                        extern INT32 LOS_DoExecveFile(const CHAR *fileName, CHAR * const *argv, CHAR * const *envp)

                                           extern STATIC CHAR *g_initPath = "/bin/init" //由Init_lite在编译后,生成
#define LOS_INIT_LEVEL_FINISH             10

评论 (3)

展开全部操作日志

建议用 sourceinsight 4.0 跟踪内核源码, QQ群:790015635 | 入群请填: 666 ,群内文档提供了工具和资料下载.

您这种建索引看代码的习惯很好,或者有没有更好的表达方式,可以一起探讨. :+1:

VScode用顺手了, 不想换 ,感觉它比 sourceinsight 好 .
只是个建议, 我一直在这么做, 感觉是必备的. 不然光找某个藏的深的函数,就要好一会跳转,跳来跳去.

把它们的函数声明集中在一起, 并注释函数功能, 相当于个代码的目录索引.
更细的可以是某个功能的流程索引.

再比如某些宏定义的函数, 数组里的函数, 是无法跳转的,只能用搜索, 用这个目录索引, 稍微好一点

输入图片说明

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
376663 kuangyufei 1618049785 7711529 lwleen 1634376604
C
1
https://gitee.com/weharmony/kernel_liteos_a_note.git
git@gitee.com:weharmony/kernel_liteos_a_note.git
weharmony
kernel_liteos_a_note
kernel_liteos_a_note

搜索帮助