SylixOS入门指南

From SylixOS-wiki
Revision as of 20:16, 9 March 2016 by Jiaojinxing (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

本文编辑环境

本文在windows7(64位)上使用Google Chrome浏览器编辑,为保证截图效果,所有截图均使用PicPick截取,windows7使用Windows 7 Base主题,即关闭了Aero特效。

本文目的

本文目的在于帮助SylixOS爱好者获得SylixOS操作系统源代码、搭建开源的SylixOS集成开发环境、编译及调试SylixOS操作系统。

获得源代码

源代码的地址与组成


SylixOS开发者们使用Git服务器管理源代码,Git服务器的地址为:http://git.sylixos.com/cgit/
Git服务器上的源代码可以分为如下几类:
examples 示例工程,包括应用程序工程、内核模块工程、库工程
examples-bsp 示例BSP工程
libraries 开源库工程
operating-system SylixOS操作系统工程、SylixOS Base工程
tools-patch 工具与补丁等
virtual-machine 虚拟机
为了下载Git服务器上的源代码,你需要一个Git客户端,如果你的PC机操作系统是windows,建议使用Git for windows。

安装Git for windows


下载地址:http://msysgit.github.io/
默认安装即可,安装步骤略。

下载源代码


创建一个名为sylixos_workspace的目录(下文约定该目录是D:\sylixos_workspace目录),打开Git Bash
输入如下命令进入该目录:
cd /d/sylixos_workspace
输入如下命令下载源代码:
git clone http://git.sylixos.com/repo/sylixos-base.git
git clone http://git.sylixos.com/repo/bspmini2440.git
git clone http://git.sylixos.com/repo/examples.git
git clone http://git.sylixos.com/repo/tools.git
git clone http://git.sylixos.com/repo/qemu-mini2440.git
sylixos-base是SylixOS Base工程,里面包含了libsylixos和libcextern子工程,输入如下命令初始化和更新子工程:
cd sylixos-base
git submodule init
git submodule update

搭建开源集成开发环境

开源集成开发环境的组成



重要:开源集成开发环境所使用的开源编译器只适用于ARM9处理器,该编译器在Cortex-A系列处理器上存在诸多问题,Cortex-A系列处理器的SylixOS开发只能使用 RealEvo IDE


SylixOS开源集成开发环境由以下组成:
  • Eclipse
Eclipse是著名的跨平台开源集成开发环境(IDE),最初主要用来开发Java语言程序,目前亦可以通过插件使其作为C++、Python、PHP等

其他语言程序的开发工具。

Eclipse本身只是一个框架平台,但是有众多插件的支持,使得Eclipse拥有极佳的灵活性。许多软件开发商都以Eclipse为框架开发自己的IDE。
下图是Eclipse在windows7上运行的界面:

Sylixide eclipse.png

  • CDT
CDT是扩展Eclipse支持C/C++开发的插件。
  • GNU Tools for ARM Embedded Processors
GNU Tools for ARM Embedded Processors是一套GNU的开发ARM处理器程序的工具集。
  • Zylin CDT
Zylin CDT是扩展Eclipse支持嵌入式远程调试的插件。
SylixOS开源集成开发环境的整体结构框图如下:

Ide.png

安装JRE


Eclipse使用Java语言开发,运行Eclipse需要JRE(Java Runtime Environment,Java运行环境),所以需要安装JRE。
它的下载页面是 http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
根据你的主机操作系统类型,下载对应的安装包,安装过程略。

安装Eclispe CDT


它的下载页面是 http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/lunasr2
根据你的主机操作系统类型,下载对应的压缩包:

Sylixide eclipsedownload.png

由于笔者的主机操作系统是64位的windows7,所以笔者下载的压缩包是eclipse-cpp-luna-SR2-win32-x86_64.zip。
下载后把它解压到D:\SylixIDE目录:

Sylixide unzipeclipse.png

解压完成后,进入D:\SylixIDE\eclipse目录,将eclipse.exe发送到桌面快捷方式以方便后续使用:

Sylixide eclipselink.png

安装GNU Tools for ARM


它的下载页面是 https://launchpad.net/gcc-arm-embedded/+download

Sylixide gccdownload.png

根据你的主机操作系统类型,下载对应的安装包。
由于笔者的主机操作系统是64位的windows7,所以笔者下载的安装包是gcc-arm-none-eabi-4_9-2015q1-20150306-win32.exe。
把它安装到D:\SylixIDE\arm-none-eabi-gcc目录。
注意要在完成界面那里勾选Add path to environment variable:

Sylixide gccinstall.png

安装完成后建议注销和重新登录操作系统。

安装yagato tools


现在还缺少make等工具,需要安装yagato tools。
安装D:\sylixos_workspace\tools\yagarto-tools\yagarto-tools-20121018-setup.exe

到D:\SylixIDE\yagarto-tools-20121018目录,

注意要在选择组件界面那里勾选Add the make utils to the PATH variable:

Sylixide yagartoinstall.png

安装完毕后需要确定系统首先找到的make是yagarto tools的make,方法如下:
在windows的控制台输入make -v命令,如果输出的make的版本是3.81,那说明安装成功了,如下图:

Sylixide make.png

备注:如果你的系统有多个make,需要确保D:\SylixIDE\yagarto-tools-20121018\bin\make.exe在最前面,
如果不是,你可能需要调整你的系统的PATH环境变量。

替换reent.h文件


由于SylixOS修改了编译器的reent.h文件,所以使用编译器自带的reent.h文件将不能编译成功。
复制D:\sylixos_workspace\tools\arm-none-eabi-patch\4.9\reent.h文件到

D:\SylixIDE\arm-none-eabi-gcc\arm-none-eabi\include\sys目录替换原有的文件。

安装Zylin CDT


复制D:\sylixos_workspace\tools\eclipse\zylin目录下的features与plugins两个子文件夹

到D:\SylixIDE\eclipse目录,提示文件夹合并时,请点击“是”按钮。

编译工程

切换SylixOS工作空间


打开Eclipse,在Eclipse中,点击File->Switch WorkSpace->Other…菜单,在弹出的对话框的Workspace中选择D:\sylixos_workspace目录,

然后点击OK按钮,Eclipse会切换工作空间到D:\sylixos_workspace目录,如下:

Sylixide workspace.png

导入SylixOS工程


Eclipse切换工作空间后,会显示欢迎界面,请关掉欢迎界面,将显示如下的界面:

Sylixide eclipseopen.png

左侧的工程浏览器空空如也,并没有显示我们期待的sylixos-base等工程,在Eclipse中,点击File->Import菜单,

在弹出的对话框中选择General下的Existing Projects into Workspace,如下:

Sylixide importprojects.png

点击Next按钮,在弹出的对话框的Select root directory那里选择D:\sylixos_workspace目录,

并且勾选bspmini2440和examples及sylixos-base工程,如下:

Sylixide importprojects2.png

最后,点击Finish按钮完成工程导入。
现在,左侧的工程浏览器应该会显示bspmini2440和examples及sylixos-base工程:

Sylixide projects.png

导入风格文件


SylixOS源码众多,但风格统一,这主要归功于开发者们使用统一的代码风格来书写SylixOS系统,

sylixos_preference.epf是我们配制的Eclipse代码样式文件,导入它来书写代码,我们就可以轻松地书写出符合SylixOS规范的代码,

这将有助于你未来向SylixOS组织提交代码,所以我们强烈建议你也导入该代码样式文件。

在Eclipse中,点击File->Import...菜单,在弹出的对话框中选中General下的Perferences:

Sylixide importpreferences.png

然后点击Next按钮,在From Perferences File那里选择D:/sylixos_workspace/tools/eclipse/sylixos_preference.epf文件,

并且选中Import All,最后点击Finish按钮:

Sylixide importpreferences2.png

编译SylixOS Base工程


sylixos-base工程包含了SylixOS操作系统libsylixos和SylixOS进程C库libextern子工程。
打开sylixos-base下的config.mk,修改为如下:

Sylixide sylixosbaseconfigmk.png

在左侧的工程浏览器中选择sylixos-base工程,然后点击Project->Build Project菜单

编译sylixos-base工程,编译耗费的时间视你的机器的性能而定,一般需要10分钟。

最后libsylixos子工程生成静态库文件libsylixos.a和libdsohandle.a及libvpmpdm.a、动态库文件libvpmpdm.so、内核模块xinput.ko

和xsiipc.ko、符号表文件symbol.c和symbol.h(位于D:\sylixos_workspace\sylixos-base\libsylixos\Debug目录)。

Sylixide libsylixosbuildresult.png

最后libextern子工程生成静态库文件libcextern.a和动态库文件libcextern.so(位于D:\sylixos_workspace\sylixos-base\libcextern\Debug目录)。

Sylixide libcexternbuildresult.png

编译bspmini2440工程


bspmini2440工程是移植SylixOS操作系统到mini2440开发板的BSP工程。
打开bspmini2440下的config.mk,修改为如下:

Sylixide sylixosbaseconfigmk.png

在左侧的工程浏览器中选择bspmini2440工程,然后点击Project->Build Project菜单编译bspmini2440工程,

最后生成ELF文件bspmini2440.elf和二进制文件bspmini2440.bin(位于D:\sylixos_workspace\bspmini2440\Debug目录)。

Sylixide bspmini2440buildresult.png

编译examples工程


examples工程是示例工程,包括应用程序工程、内核模块工程、库工程。
打开examples下的config.mk,修改为如下:

Sylixide sylixosbaseconfigmk.png

在左侧的工程浏览器中选择examples工程,然后点击Project->Build Project菜单编译examples工程。
examples工程包含了三个子工程:应用程序示例工程hello_world、内核模块示例工程hello_module、库示例工程hello_library。
  • 应用程序示例工程hello_world会生成应用程序可执行文件hello_world(位于D:\sylixos_workspace\examples\hello_world\Debug目录)。
  • 内核模块示例工程hello_module会生成内核模块文件hello_module(位于D:\sylixos_workspace\examples\hello_module\Debug目录)。
  • 库示例工程hello_library会生成静态库文件libhello_library.a和动态库文件libhello_library.so

(位于D:\sylixos_workspace\examples\hello_library\Debug目录)。

运行SylixOS

运行SylixOS操作系统


上面我们已经编译出mini2440开发板运行SylixOS操作系统的镜像,为了让没有mini2440开发板的朋友也能尝鲜,我们提供了

Qemu for mini2440虚拟机。

该虚拟机位于D:\sylixos_workspace\qemu-mini2440目录,首次使用该虚拟机,需要如下进行如下两个步骤的操作:
1. 生成Nand Flash镜像文件
执行nandCreator.exe,执行完成后,会在当前目录生成一个名为nand.bin的Nand Flash镜像文件。
2. 增加虚拟网卡
执行addtap.bat批处理文件,以增加虚拟网卡(可以执行deltapall.bat批处理文件将所有的虚拟网卡删除,
如果你有其它虚拟网卡,请不要执行它!)。

Sylixide tapinstall.png

将新增的虚拟网卡的名字重命名为virtual(由上图可以看到新增的虚拟网卡是TAP-win32 Adapter V9),
将它的IP设为192.168.7.XX(必须要和SylixOS目标板的IP同一个网段),将子网掩码设为255.255.255.0。

Sylixide ipconfig.png

mini2440_run.bat的内容如下:
start qemu-system-arm.exe -M mini2440 -show-cursor -kernel ../bspmini2440/Debug/bspmini2440.bin -serial 
telnet:127.0.0.1:1200,server -mtdblock nand.bin -serial file:virtualkbd -net nic -net tap,ifname=virtual,vlan=1 
start putty.exe telnet://127.0.0.1:1200/
可以看到它首先启动了Qemu虚拟机的可执行程序qemu-system-arm.exe,通过参数指定了module为mini2440开发板,

指定了kernel镜像为../bspmini2440/Debug/bspmini2440.bin,指定了串口为telnet服务器:127.0.0.1:1200,

指定了网卡的接口名为virtual,指定了Nand Flash镜像文件为nand.bin。

之后启动了终端软件putty.exe,通过参数让putty连接telnet://127.0.0.1:1200/,即连接到mini2440开发板的串口。
执行mini2440_run.bat,稍等数秒SylixOS系统将启动起来并进入到控制台:

Sylixide console.png

在控制台下输入命令:
ifconfig
可以查看或配置SylixOS目标板的网络接口,输入该命令,我们得知SylixOS目标板的en1网络接口的IP地址为192.168.7.30。

运行SylixOS应用程序


SylixOS操作系统内建了一个FTP服务器,只要PC机安装FTP客户端就能连接上SylixOS目标板的FTP服务器,就可以很方便地通过

FTP客户端向目标板传输文件,如应用程序可执行文件等。

如果你的PC机操作系统是windows,建议安装filezilla FTP客户端,它的官网地址为 https://filezilla-project.org/
安装完成后,打开filezilla,务必将传输类型修改为二进制,点击“传输 -> 传输类型 -> 二进制”菜单:

Sylixide ftpsetting.png

然后新建一如下的FTP站点,IP地址为SylixOS目标板的IP地址(如上面的192.168.7.30),端口号为21,用户名和密码均为root:

Sylixide ftpconfig.png

建议重命名该FTP站点的名称为IP地址,即192.168.7.30,以方便区分。
点击“连接”按钮即可连接到SylixOS目标板的FTP服务器:

Sylixide ftp.png

将本地磁盘路径切换到 D:\sylixos_workspace\examples\hello_world\Debug\ 目录,

可以看到该目录有我们之前编译应用程序示例工程hello_world生成的应用程序可执行文件hello_world,

将其拖动到右侧的SylixOS目标板文件列表的/apps目录,即可将其传输到SylixOS目标板的/apps目录。

应用程序可执行文件hello_world运行时还依赖于进程补丁libvpmpdm.so(位于D:\sylixos_workspace\sylixos-base\libsylixos\Debug目录),

将libvpmpdm.so拖动到右侧的SylixOS目标板文件列表的/lib目录,即可将其传输到SylixOS目标板的/lib目录。

在控制台下输入命令 cd /apps 以进入 /apps 目录,再输入命令 ./hello_world 即可执行应用程序hello_world:
[root@sylixos_station:/]# cd /apps/
[root@sylixos_station:/apps]# ./hello_world
hello world (base on sylixos)!

插入SylixOS内核模块


将本地磁盘路径切换到D:\sylixos_workspace\examples\hello_module\Debug\目录,

可以看到该目录有我们之前编译内核模块示例工程hello_module生成内核模块文件hello_module.ko,

将其拖动到右侧的SylixOS目标板文件列表的/lib/modules目录,即可将其传输到SylixOS目标板的/lib/modules目录。

在控制台下输入命令 cd /lib/modules 以进入 /lib/modules 目录,再输入命令 modulereg hello_module.ko 即可插入

内核模块文件hello_module.ko进内核:

[root@sylixos_station:/apps]# cd /lib/modules/
[root@sylixos_station:/lib/modules]# modulereg hello_module.ko
hello_module init!
module hello_module.ko register ok, handle : 0x30c5da78
在控制台下输入命令 modules 即可查看当前内核插入的内核模块:
[root@sylixos_station:/lib/modules]# modules

            NAME                HANDLE   TYPE  GLB   BASE     SIZE    SYMCNT
------------------------------ -------- ------ --- -------- -------- --------
VPROCESS: kernel               pid:   0 TOTAL MEMORY: 8192
+ hello_module.ko              30c5da78 KERNEL YES c00d1000       c4        2

total modules : 1

调试SylixOS

增加调试实例


关闭上面的Qemu虚拟机程序。
先选中bspmini2440工程,然后点击调试工具栏Sylixide newdebug.png 的臭虫图标的下拉的Debug Configurations…菜单,将弹出如下的调试配置对话框:

Sylixide newdebugzylin.png

双击Zylin Embedded debug(Native),将增加一个名为bspmini2440 Default的实例:

Sylixide newzylindebug.png

修改调试配置


切换到Debugger选项卡,将GDB Debugger修改为
arm-none-eabi-gdb
将Stop on startup at修改为
reset

Sylixide debugconfig.png

切换到Commands选项卡,将Initalize commands修改为如下的内容:
target remote localhost:1234
load

Sylixide debugcommands.png

最后点击Apply按钮应用修改,点击Debug按钮开始调试。

开始调试


mini2440_debug.bat的内容如下:
start qemu-system-arm.exe -s -S -M mini2440 -show-cursor -serial telnet:127.0.0.1:1200,server 
-mtdblock nand.bin -serial file:virtualkbd -net nic -net tap,ifname=virtual
start putty.exe telnet://127.0.0.1:1200/
mini2440_debug.bat和mini2440_run.bat的区别在于mini2440_debug.bat并没有指定kernel镜像文件(依靠上面的 load 命令下载 kernel),但增加 -s -S 选项。
执行mini2440_debug.bat批处理文件,如果出现如下的windows安全警报,请点击允许访问按钮。

Sylixide netwarnning.png

稍等数秒,Eclipse将控制arm-none-eabi-gdb连接到Qemu虚拟机,并将SylixOS的相关节区section加载到mini2440开发板内存的相应位置:
target remote localhost:1234
Remote debugging using localhost:1234
0x00000000 in ?? ()
load
Loading section .text, size 0x32f6fc lma 0x30000000
Loading section .ARM.exidx, size 0x8 lma 0x3032f6fc
Loading section .ctors, size 0x8 lma 0x3032f704
Loading section .dtors, size 0x8 lma 0x3032f70c
Loading section .data, size 0x282cc lma 0x3032f714
Start address 0x30000000, load size 3504608
Transfer rate: 497 KB/sec, 2028 bytes/write.
现在你可以通过图形化的方式调试SylixOS系统了:

Sylixide debug.png

调试真机


如果您需要使用硬件调试器(如J-Link edu)调试真实的mini2440开发板。
先使用JTAG连接线和JTAG转接板连接J-Link到mini2440开发板的JTAG接口,然后打开J-Link GDB Server软件。
目标设备Target device选择Samsung公司的S3C2440A芯片,并选择小端Little endian。
目标接口Target interface选择JTAG。
速度Speed选择自动选择Auto selection,如下图:

Sylixide jlink.png

最后,点击OK按钮,J-Link GDB Server将开始工作:

Sylixide jlinkgdbserver.png

将bspmini2440/S3C2440.gdbinit文件的内容复制到bspmini2440 Default调试实例的Commands选项卡的Initalize commands内,如下图:

Sylixide debugconfigjlink.png

bspmini2440/S3C2440.gdbinit文件的内容如下:
#connect to J-Link GDB Server
target remote localhost:2331

#reset target
monitor reset

#select endian
monitor endian little

#initialize memory controler
monitor long 0x53000000 = 0x00000000   
monitor long 0x4a000008 = 0xFFFFFFFF   
monitor long 0x4a00001c = 0x00007FFF   
monitor long 0x4c000000 = 0x00FFFFFF   
monitor long 0x4c000014 = 0x00000005   
monitor long 0x4c000004 = 0x0007F021   
monitor long 0x48000000 = 0x12111110   
monitor long 0x48000004 = 0x00000700   
monitor long 0x48000008 = 0x00000700   
monitor long 0x4800000c = 0x00000700   
monitor long 0x48000010 = 0x00000700   
monitor long 0x48000014 = 0x00000700   
monitor long 0x48000018 = 0x00000700   
monitor long 0x4800001c = 0x00018005   
monitor long 0x48000020 = 0x00018005   
monitor long 0x48000024 = 0x009804EC   
monitor long 0x48000028 = 0x000000B2   
monitor long 0x4800002c = 0x00000030   
monitor long 0x48000030 = 0x00000030

#wait for moment
monitor sleep 20

#load the debug image
load

#set cpu to svc mode(on cpu reset)
monitor reg cpsr = 0xd3

#debug in ram 
monitor reg pc   = 0x30000000

#debug begin
最后,点击Debug按钮开始调试。
Personal tools
Namespaces

Variants
Actions
Navigation
Tools