【原创】-- uboot,kennel,fs,rootfs 编译制作
环境:ubuntu14.04 内核版本 linux 3.13.0 OK6410
内核编译环境 linux 3.0.1
uboot版本 1.1.6
交叉编译工具链 arm-linux-gcc 4.3.2
1、 编译前要首先安装好交叉工具链,安装过程见博文http://www.cnblogs.com/apolloenterprise/p/4324726.html
2、 编译uboot
下载uboot源码,下载地址 http://pan.baidu.com/s/1qWINJre 》》》目前使用的是 uboot1.1.6
进入uboot源码目录,
$ make clean
$ make forlinx_nand_ram256_config
$ make ARCH=arm CROSS_COMPILE=arm-linux-
会生成 u-boot.bin
3 配置及编译kernel
下载kernel源代码,下载地址 http://pan.baidu.com/s/1sjvfnKp 》》》目前使用的是 kernel 3.0.1
进入kernel源码目录
$ make menuconfig ARCH=arm
进入图形界面,进行相关配置(),如果需要采用nfs方式挂载根文件系统,此时需设置
$ make uImage ARCH=arm CROSS_COMPILE=arm-linux-
第一次编译时会显示错误如下:
(1)"mkimage" command not found - U-Boot images will not be built
make[1]: *** [arch/arm/boot/uImage] 错误 1
make: *** [uImage] 错误 2
为避免此错误修改如下:
进入 Uboot源代码目录
cp mkimage /bin
修改完成,再次编译即可
(2)
Unable to find the ncurses libraries or the
required header files.
'make menuconfig' requires the ncurses libraries.
Install ncurses (ncurses-devel) and try again.
解决:sudo apt-get install libncurses5-dev
Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库
在内核源代码目录的 arch/arm/boot 中 生成uImage
4、 制作文件系统
linux可能包含多个文件系统,根文件系统必须要有
(1) 创建目录
$ mkdir rootfs
$ cd rootfs
$ mkdir bin dev etc lib proc sbin sys usr mnt tmp var
$ mkdir usr/bin usr/lib usr/sbin lib/modules
(2) 创建设备文件
$ cd rootfs/dev
$ mknod -m 666 console c 5 1
$ mknod -m 666 null c 1 3
(3)添加配置文件
配置文件下载地址 http://pan.baidu.com/s/1kTyFipL 》》》》链接
$ tar zxvf etc.tar.gz
$ cp etc/* rootfs/etc/ -rf
(4)添加内核模块
$ 进入编译使用的内核源代码
$ make modules ARCH=arm CROSS_COMPILE=arm-linux-
$ make modules_install ARCH=arm INSTALL_MOD_PATH=/work/rootfs (/work/rootfs 为制作的文件系统目录)
运行完成后,可在/work/rootfs/lib/modules中看到新文件
注意:如果运行 make modules_install 出现如下错误:
##Warning: you may need to install module-init-tools
See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt
make: 没有什么可以做的为 `/work/rootfs'
则需要对 module-init-tools进行更新,更新方法如下:
接下来, 按照下列步骤安装module-init-tools工具包:
下载地址:http://download.chinaunix.net/download.php?id=13907&ResourceID=6901
$ tar -zxvf module-init-tools-3.2.2.tar.gz
在module-init-tools-3.2.2目录下,
$ ./configure --prefix=/
$ make moveold
$ make all install
$ ./generate-modprobe.conf /etc/modprobe.conf
执行过这几行代码就可以使用make modules_install
(5)编译安装busybox
busybox 下载地址:http://pan.baidu.com/s/1kTLFLVh》》》
$ 进入busybox 目录
$ make menuconfig
setting-build Options-
选中 "Build busybox as a static binary"
"Cross Compiler prefix " 填写 arm-linux-
setting-Installation Options-
选中 “Don't use/use” , 此项可避免busybox被安装到宿主系统的usr目录中,破坏宿主系统
"(./_install)busyBox installtion prefix" 填写 /work/rootfs 此目录为制作的rootfs的路径
$ make
$ make install
在/work/rootfs/bin 中新生成许多命令
【原创】-- uboot,kennel,fs,rootfs 编译制作的更多相关文章
- 嵌入式 uboot、fs、kernel制作和烧录简记-hi3518c
NULL RAM : mkdir ramdisk_test 临时挂在点 dd if=/dev/zero of=rootfs.ramdisk bs=1k count=10000 建立空硬盘//1500 ...
- RK3568开发笔记(四):在虚拟机上使用SDK编译制作uboot、kernel和buildroot镜像
前言 上一篇搭建好了ubuntu宿主机开发环境,本篇的目标系统主要是开发linux+qt,所以需要刷上billdroot+Qt创建的系统,为了更好的熟悉原理和整个开发过程,选择从零开始搭建rk35 ...
- RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像
前言 buildroot虽然灵活,但是基于实际情况,本身是侧重驱动和应用定制开发的只定制一次文件系统投入有点多,还不如直接ubunt自己交叉编译依赖库,做一些库的移植裁剪. 于是本篇就使用ubu ...
- u-boot的配置、编译及链接
第一次写技术博客,还有些兴奋呢.我是CrazyCatJack,大家可以叫我CCJ或者疯猫.我即将成为一名嵌入式Linux的驱动工程师,现在还是一枚大四狗,呼呼~大学期间做了一些项目和比赛,都是基于32 ...
- 编译制作Linux 3.18内核rpm包(升级centos6.x虚拟机内核)
介绍 openstack平台需要使用各种Linux发行版模板镜像,其制作方法主要有两种,要么是基于各大Linux发行版ISO光盘手动制作,要么是使用官方提供的模板镜像再做修改 之前制作的opensta ...
- ARM开发板系统移植-----rootfs的制作
前面两篇文章分别介绍了mini2440开发板上运行的bootloader和kernel,到这里系统启动后其实是停留在一个“僵死”的状态---无法挂载根文件系统. 这里将介绍如何制作一个根文件系统,并且 ...
- 第2阶段——编写uboot之硬件初始化和制作链接脚本lds(1)
目标: 1.关看门狗 2.设置时钟 3.初始化SDRAM (初始化寄存器以及清除bss段) 4.重定位 (将nand/nor中代码COPY到链接地址上,需要初始化nandflash,读flash) 5 ...
- 第2阶段——编写uboot之启动内核和制作Makefile(2)
目标: 1 添加头文件setup.h和serial.h 2 写main函数 2.1 帮内核设置串口0, (内核启动会打印出启动信息) 2.2把内核读入到SDRAM 2.3设置参数(参考u- ...
- 第1阶段——uboot分析之仿照bootm制作hello命令(7)
仿照bootm命令生成来制作一个hello命令,功能:打印出hello,world!和参数值 1.点击New File ,创建cmd_hello.c将./common/cmd_bootm.c的头文件复 ...
随机推荐
- MySQL绿色版5.7以上安装教程
写在前面:5.7增加了安全性,默认root密码不在为空,而是初始化时随机生成一个root密码,改root密码的方式也不一样了 下载地址 http://dev.mysql.com/downloads/m ...
- 4,SFDC 管理员篇 - 数据模型 - 基本对象
Setup | Customize | Object Name | Filed 1, 标准字段定义 standard field:系统字段,不能删除,但是能在页面中remove non-requi ...
- CSS隐藏元素的几种方法
使用CSS隐藏元素的方法很多,在这里简单总结一下: 1.display:none display:none 应该是最常用的一种隐藏元素的方法,使用该方法隐藏的元素脱离文档流不占据空间,不会被浏览器解析 ...
- Mybatis保存数据时事务问题
今天不小心在sqlplus中用for update ,然后事务没提交,结果在项目中一直保存不进去数据,找了很久发现是sqlplus中的事务没提交,哎,这种问题真得避免啊,一定要细心啊!
- notepad++ 正则表达式
body { font-family: Bitstream Vera Sans Mono; font-size: 11pt; line-height: 1.5; } html, body { colo ...
- web开发-给即将毕业实习生的一点面试经验
简历投递: 智联招聘51job 像赶集网和58同城最好别去投 面试的公司,特别是深圳这边,面试的时候公司小,很多人,八九不离十是那种搞培训的,很多时候,有些公司会主动打电话来教你去面试,这些绝大多数也 ...
- python异常处理、反射、socket
一.isinstance 判断对象是否为类的实例 n1 = print isinstance(n1,int) class A: pass class B(A): pass b= B() print i ...
- Linux_05------Linux之vim编辑器
行 * -/xxx 向后搜索 * -?xxx 向前搜索 * 命令模式下: * -h: 光标左移 * -j: 光标下移 * -k: 光标上移 * -l: 光标右移 * -ctrl+f: 向下翻页(fro ...
- 为什么匿名内部类和局部内部类只能访问final变量
因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或 ...
- json 特殊字符 javascript 特殊字符处理(转载)
特殊字符以前都是禁止页面输入,这样就简单不容易出错,但最近需求要求能输入特殊字符整理出java返回json时特殊字符的转义(不转义会破坏json数据格式导致页面读取数据出错) Java代码 publi ...