系统移植(u-boot、内核、根文件系统)

1. u-boot是什么

Bootloader是硬件启动的引导程序,是运行操作系统的前提;对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境;加载并执行内核;

Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。

u-boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。

2. u-boot移植步骤
  1. 下载源码
  2. 解压u-boot源码进入
  3. 指定交叉编译工具链
  4. 查看u-boot是否支持cpu — arch/arm/cpu/armv7/exynos/
  5. 导入板级配置文件 — 找一个最类似的 board配置修改, 这里我们参考的是 board/samsung/origen/ — make origen_config
  6. 编译u-boot 生成的u-boot.bin文件就是可执行的镜像文件。

exynos 需要三星提供的初始引导加密后,u-boot才能被引导运行运行

3. linux内核移植
  1. 下载linux内核并解压

  2. 进入源码目录,修改Makefile为交叉编译工具

  3. 明确三星猎户座芯片 — make exynos_defconfig

  4. 进入内核配置界面勾选需要的配置 — make menuconfig

  5. 编译内核:make uImage — u-boot格式的内核镜像文件

  6. 编译设备树:
    make exynos4412-origen.dtb

  7. 拷贝内核和设备树文件到tftp共享目录下,以供开发板远程下载;

4.根文件系统的移植

通过使用busybox工具制作几个重要的文件,和可执行文件目录;从http://www.busybox.net/ 下载busybox源代码。

  1. 拷贝源码到ubuntu中,并解压,
    tar -vxf busybox-1.22.1.tar.bz2
  2. 进入源码目录,执行make menuconfig进入根文件系统配置菜单
Busybox Settings --->
	Build Options --->
			[*] Build BusyBox as a static binary (no shared libs)          //勾选上
			[ ] Force NOMMU build
			[ ] Build with Large File Support (for accessing files > 2 GB)
			(arm-linux-) Cross Compiler prefix                             //输入arm-linux-
			() Additional CFLAGS
  1. 配置完成后进行编译
    make

  2. 导出文件 — make install

    //编程生成的文件默认在_install文件夹
       //建议拷贝到主目录,同时更改名字为rootfs   
       cp _install  ~/ -r  //拷贝到主目录
       mv _install rootfs  //更改名字
    
  3. 添加相应的库与文件
    mkdir etc dev tmp mnt proc sys var lib

     将工具链中的库拷贝到rootfs中的lib目录
      sudo cp  /home/farsight/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/* ./lib/ -a			// 注意修改成 自己的目录
    	    
      rm  ./lib/*.a              //删除静态库                      
      arm-linux-strip  ./lib/*   //拆剪     
    

    在etc下添加文件inittab脚本文件,配置init进程,文件内容如下:

	#this is run first except when booting in single-user mode.
	::sysinit:/etc/init.d/rcS
	# /bin/sh invocations on selected ttys
	# start an "askfirst" shell on the console (whatever that may be)
	::askfirst:-/bin/sh
	# stuff to do when restarting the init process
	::restart:/sbin/init
	# stuff to do before rebootingc
	::ctrlaltdel:/sbin/reboot

​ 在etc下添加文件fstab快捷方式文件,文件内容如下:

	#device   mount-point     type      options         dump           fsck order
	proc      /proc          proc       defaults         0               0
	tmpfs     /tmp          tmpfs      defaults         0            c   0
	sysfs      /sys          sysfs       defaults         0               0
	tmpfs    /dev         tmpfs        defaults         0               0

在etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:

	#!/bin/sh
	# This is the first script called by init process
	/bin/mount  -a
	echo  /sbin/mdev  >  /proc/sys/kernel/hotplugc
	/sbin/mdev  -s

chmod   +x  init.d/rcS  //添加执行权限

在etc下添加profile文件,文件内容为:


	LD_LIBRARY_PATH=/lib:/usr/lib
	export LD_LIBRARY_PAHT
	PATH=/bin:/sbin:/usr/bin:/usr:/sbin
	export PATHc
	export HOSTNAME=fs4412
	export USER=root
	export HOME=/root
	export PS1="[$USER@$HOSTNAME:\W]\# "
  1. 通过nfs进行挂载测试

    	a.搭建nfs服务  
    		sudo apt install nfs-kernel-server 
    	b.修改配置文件(/etc/exports),将主目录下的rootfs共享出来
    		/home/yan/rootfs  *(rw,sync,no_subtree_check,no_root_squash)
    	c.重启服务
    		sudo service nfs-kernel-server restart 
    
  2. 设置uboot环境变量

setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-origen.dtb\;bootm 41000000 - 42000000
setenv bootargs root=/dev/nfs nfsroot=192.168.1.105:/home/yan/rootfs,v3 rw console=ttySAC2,115200 init=/linuxrc ip=192.168.1.122 clk_ignore_unused
saveenv

//注意修改ip地址  192.168.1.105 :ubunut地址
//192.168.1.122 : 指定开发板ip地址 

8.上电启动,观察能进入控制台则成功。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值