tudos port to loongson1b
tudos from svn version r49(P-MKLS232-001-20130211).
既然无法完全读懂tudos的构建系统,那么从一个空白的结构开始逐文件添加,也许是一个可 行的方案。
-
准备 tudos源目录 : src-dir=
/Code/tudos 测试目录 : dst-dir=/Code/github/tudos-loongson -
根据tudos的说明,最初的构建是从fiasco开始的。首先将最基本的Makefile拷贝过去。 $ cp ${src-dir}/src/kernel/fiasco/Makefile ${dst-dir}/src/kernel/fiasco/Makefile $ cd
${dst-dir}/src/kernel/fiasco $ make BUILDDIR=${dst-dir}/build 这时提示需要template。继续拷贝 $ cp${src-dir}/src/kernel/fiasco/src/templates/Makefile.builddir.templ src/templates/Makefile.builddir.templ $ make BUILDDIR=${dst-dir}/build Creating build directory "/home/loongson/Code/github/tudos-loongson/build/"... done. 好,转入build目录,下一步。 -
根据tudos的说明,这一步要对内核进行配置。 $ make menuconfig 提示缺少bsp和Kconfig。另外,由于不需要这些bsp,所以要修改Makefile。
-
添加bsp。修改Makefile 以原始版本中的ppc32/bsp为范本,创建mips/bsp/loongson1b $ vim src/kernel/fiasco/src/Makefile 182行 BSP_DIR :=
$(srcdir)/kern/arm/bsp $ (srcdir)/kern/ppc32/bsp$(srcdir)/kern/sparc/bsp 修改为 BSP_DIR := $ (srcdir)/kern/mips/bsp -
添加Kconfig,修改Kconfig make menuconfig会根据Kconfig生成配置菜单,然后在设置相应的配置变量。 仿照PPC32添加MIPS配置
-
再次配置 $ INCLUDE_MIPS=y make menuconfig 配置菜单中选中: [*] Prompt for experimental features 会开启MIPS处理器选项。_ 在Debugging部分,取消 [ ] JDB disassembler 将处理器及平台选好。保存,退出配置。
-
开始编译 $ make 提示缺少Makeconf。
-
添加Makeconf,按照Makeconf.ppc32添加Makeconf.mips。 Makeconf以及体系相关的Makeconf.xxx用来配置工具链及库。 关于LD_EMULATION_CHOICE,可以根据ld -V查看工具链(当然是MIPS工具链)支持的emulation。
-
再次编译 $ make 提示缺少Modules.mips和Modules.generic
-
添加Modules.generic和Modules.mips Modules.xxx是模块配置文件。构建内核的必备文件。此处模块与Linux的内核模块概念不同。 根据Modules.ppc32添加Modules.mips。其中内容涉及到抽象对象的具体实现的问题,由于移植只针对Loongson1B,所以实现的后缀不用mips而用loongson1b。
-
再次编译 $ make 提示缺少Makefile.sub1和Makefile.sub2
-
添加Makefile.sub1和Makefile.sub2 据信,Makefile.sub1用来创建源文件 据信,Makefile.sub2用来创建其他的文件(文档什么的)
-
再次编译 $ make 提示缺少Makerules.global
-
添加Makerules.global和Makerules.xxx Makerules.xxx是某模块的具体构造说明 将所有的Makerules.xxx添加进来。
-
再次编译 $ make 提示缺少lib/uart 看来已经进入实质的构建了。
-
添加lib ${src-dir}/src/kernel/fiasco/src/lib中全部是各种库的源代码。miniglibc、gzip、uart等等 将lib全部拷贝
-
再次编译 $ make 提示没有构建kip.cpp的规则。
-
添加abi ${src-dir}/src/kernel/fiasco/src/abi定义了abi,也是实现l4基本对象的所在,fpage,kip,msg都在这里 将abi全部拷贝。 仿照ppc32添加mips目录,并添加kip-mips.cpp
-
再次编译 $ make 提示没有构建cpu_mask.cpp的规则。_
-
添加kern ${src-dir}/src/kernel/fiasco/src/kern在abi的基础上,kern中的代码具有相对宽松的环境,此处实现了全部的内核对象 将kern全部拷贝。 注意,bsp也在这里。
-
再次编译 $ make 提示没有构建startup-mips.cpp的规则。
-
添加startup-mips.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/startup-xxx.cpp 根据ppc32添加startup-mips.cpp。startup分为两步。
-
再次编译 $ make 提示没有构建boot_info-mips.cpp的规则。
-
添加boot_info-mips.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/boot_info-xxx.cpp 根据ppc32添加。
-
再次编译 $ make 提示没有构建boot_info-loongson1b.cpp的规则。
-
添加boot_info-loongson1b.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/bsp/yyy/boot_info-yyy.cpp 根据ppc32/mpc52xx添加。
-
再次编译 $ make 提示没有构建mapping-mips.cpp的规则。
-
添加mapping-mips.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/mapping-xxx.cpp 根据ppc32添加。
-
再次编译 $ make 提示没有构建pic-loongson1b.cpp的规则。
-
添加pic-loongson1b.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/bsp/yyy/pic-yyy.cpp 根据ppc32/mpc52xx添加。
-
再次编译 $ make 提示没有构建mem_space-mips.cpp的规则。
-
添加mem_space-mips.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/bsp/yyy/pic-yyy.cpp 根据arm添加,只保留armv5的实现(空实现)。 这里由于ppc32做mem_space需要多个文件(mem_space-htab、mem_space-cache),所以删除 Modules.mips中相应的依赖。
-
再次编译 $ make 提示没有构建space-mips.cpp的规则。
-
添加space-mips.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/space-xxx.cpp 根据ppc32添加。
-
再次编译 $ make 提示没有构建kmem.cpp的规则。
-
添加kmem.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/kmem.cpp 根据ppc32添加。
-
再次编译 $ make 提示没有构建kmem_alloc-mips.cpp的规则。
-
添加kmem_alloc-mips.cpp ${src-dir}/src/kernel/fiasco/src/kern/xxx/kmem_alloc-mips.cpp 根据ppc32添加。
-
发现所有以上都列在Modules.mips。按照Modules.mips所依赖文件,从ppc32复制过来, 并修改。
-
复制jdb目录 ${src-dir}/src/kernel/fiasco/src/jdb 内核调试功能
-
修改复制的文件中ppc32为mips,mpc52xx为loongson1b,为MIPS增加一些空实现
-
gcc有版本限制,下载最新的工具链。
肩宽35 胸围75 袖长25 身长47 腿长17