当前位置: 技术问答>linux和unix
如何建立kernel+文件系统开发环境问题
来源: 互联网 发布时间:2016-07-10
本文导语: 看到ti和freescale都有那种就是在一个目录下make就能编出文件系统和kernel的环境, 而且文件系统除了busybox里的还包括其他很多东西,想问这样的环境是怎么建立的,用什么工具? 大家指点,谢谢了。 |...
看到ti和freescale都有那种就是在一个目录下make就能编出文件系统和kernel的环境,
而且文件系统除了busybox里的还包括其他很多东西,想问这样的环境是怎么建立的,用什么工具?
大家指点,谢谢了。
而且文件系统除了busybox里的还包括其他很多东西,想问这样的环境是怎么建立的,用什么工具?
大家指点,谢谢了。
|
你可以参考一下uclinux的工具包的做法,它就是在linux上面包了一层的makefile,可以直接编译文件系统
|
简单的说下我的理解是:
1. 首先做出交叉编译环境,主要包含3部分代码:gcc,binutils,glibc(uclibc)
2. 编译Linux Kernel(针对具体硬件做相应的移植工作)
3. 编译buildbox或者是core-utils这个包,生成常用的命令
4. 要自己写或者修改/etc下的所有配置文件
5. 根据具体的需要添加相应的库以及应用程序
6. 将所有的这些东东整合成一个文件系统
建议看下:
http://www.buildroot.net/
这个网站,用下他的代码,你大概有个了解了,但他不完整,所以我还推荐你去看
http://www.openwrt.org/这个工程。
比如你在上面下载个whiterussian_rc6.tar.bz2也就3MB多,里面是什么?
都是脚本,和Patch文件。
你运行他,他会调用wget下载包,然后解压缩,然后打Patch,然后build。
基本就是按照上面的那6步做的。
openwrt你看懂了,功力一定大涨,他还有个技术在嵌入式的包管理系统,也就是ipkg,
也很值得仔细研究下。
1. 首先做出交叉编译环境,主要包含3部分代码:gcc,binutils,glibc(uclibc)
2. 编译Linux Kernel(针对具体硬件做相应的移植工作)
3. 编译buildbox或者是core-utils这个包,生成常用的命令
4. 要自己写或者修改/etc下的所有配置文件
5. 根据具体的需要添加相应的库以及应用程序
6. 将所有的这些东东整合成一个文件系统
建议看下:
http://www.buildroot.net/
这个网站,用下他的代码,你大概有个了解了,但他不完整,所以我还推荐你去看
http://www.openwrt.org/这个工程。
比如你在上面下载个whiterussian_rc6.tar.bz2也就3MB多,里面是什么?
都是脚本,和Patch文件。
你运行他,他会调用wget下载包,然后解压缩,然后打Patch,然后build。
基本就是按照上面的那6步做的。
openwrt你看懂了,功力一定大涨,他还有个技术在嵌入式的包管理系统,也就是ipkg,
也很值得仔细研究下。
|
http://www.buildroot.net/
http://www.openwrt.org/
这就是HelloWorld,你看了么?
|
具体我也不清楚,但是我明白你说的意思了。
顶级目录里都有一个Rules.make,指定了编译工具,库的目录,目标文件夹等等,然后进去就直接make,的确非常的方便,整个大的工程都管理得有条不紊。
顶级目录里都有一个Rules.make,指定了编译工具,库的目录,目标文件夹等等,然后进去就直接make,的确非常的方便,整个大的工程都管理得有条不紊。
|
LFS 你的选择,很全很强da.
|
有各种不同的实现方式。
个人认为比较方便的一种是递归方式的Makefile调用,简单说就是在顶层的Makefile调用($(MAKE) -C 或者 $(MAKE) --directory=)其他目录或者子目录中的Makefile,这个原来的源码树(linux或者busybox)中的Makefile不用修改。
用非递归的方式也可以,就是在顶层的Makefile把其他目录的Makefile include进来。不过,可能要修改原来源码树中的Makefile.
上述应该算是通常的实现方式吧,你要觉得不爽自己写程序,写脚本来处理也可以。
个人认为比较方便的一种是递归方式的Makefile调用,简单说就是在顶层的Makefile调用($(MAKE) -C 或者 $(MAKE) --directory=)其他目录或者子目录中的Makefile,这个原来的源码树(linux或者busybox)中的Makefile不用修改。
用非递归的方式也可以,就是在顶层的Makefile把其他目录的Makefile include进来。不过,可能要修改原来源码树中的Makefile.
上述应该算是通常的实现方式吧,你要觉得不爽自己写程序,写脚本来处理也可以。