嵌入式设备(exynos4412)
[1]iROM固化代码(基本硬件初始化,判别启动方式(SD/USB/EMMC),
读取存储介质一部分数据到iRAM
)
[2]iRAM代码运行bootloader第一阶段(初始化系统时钟,初始化内存,搬移bootloader到内存)
[3]内存中运行bootloader第二阶段(初始化基本的硬件设备(串口,EMMC,SD),加载OS到内存)
[4]内存中运行操作系统(Linux,windows CE,Mac OS)
[5]挂载文件系统
[6]运行应用程序
bootloader = BIOS + 引导程序
二 Linux 解压命令
tar -xvf xxx.tar.*
xxx.tar.gz -> tar -zxvf xxx.tar.gz
xxx.tar.bz2 -> tar -jxvf xxx.tar.bz2
xxx.tar.xz -> tar -Jxvf xxx.tar.xz
三 添加交叉开发工具链
交叉开发:在PC机完成代码的编写与编译,在开发板运行编译好的程序
export PATH=$PATH:交叉开发工具链绝对路径
例如:
在/home/linux/.bashrc(针对当前的登陆用户有效)或/etc/bash.bashrc(所有用户都有效)文件中添加如下内容:
TOOL_CHAIN=/home/linux/fs4412/toolchain/gcc-4.6.4/bin
export PATH=$PATH:$TOOL_CHAIN
注意:
64bit ubuntu需要在线安装32bit运行库
sudo apt install lib32ncurses5
sudo apt install lib32z1
四 sd卡烧写u_boot
(1)mkuboot.sh -> 在烧写一个uboot到sd卡
(2)通过拨碼开关从sd卡启动
(2)在sd卡中新建一个sdupdate目录
(4)将自己编译好的u-boot-fs4412.bin拷贝到了sdupdate目录
(5)从sd卡启动,在启动的uboot中,
输入命令:(将bootloader写到emmc)
(6)拨动拨碼开关从emmc启动
五 用u_boot引导Linux内核
1.配置tftp服务(文件传输)
(1)安装软件包
离线方式安装:
sudo dpkg -i *.deb
在线方式安装:
sudo apt-get install tftp-hpa (客户端程序)
sudo apt-get install tftpd-hpa (服务端程序)
注意:
lsb_release -a 查看ubuntu版本信息
(2)修改默认的配置文件 /etc/default/tftpd-hpa
TFTP_DIRECTORY="/home/linux/fs4412/tftpboot" 自己的tftpboot路径
(3)重新启动tftp服务
sudo /etc/init.d/tftpd-hpa restart
或
sudo service tftpd-hpa restart
测试:
tftp 127.0.0.1(server IP)
tftp>get 下载的文件
tftp>quit
2.配置nfs服务(设置目录为网络上的共享目录)
(1)安装软件包
sudo apt-get install nfs-kernel-server
(2)修改默认的配置文件 /etc/exports
自己电脑上需要共享的目录路径
/home/linux/fs4412/fs/rootfs *(rw,sync,no_root_squash)
(3)重新启动nfs服务
sudo /etc/init.d/nfs-kernel-server restart
或
sudo service nfs-kernel-server restart
测试:
sudo mount IP:共享路径 自己的挂载点目录
例如:
sudo mount 127.0.0.1:/home/linux/fs4412/rootfs ./nfs(自己电脑上当前目录下的nfs子目录)
撤销:
sudo umount 挂载点目录
六 u_boot常用命令
(1)设置开发板ip地址
setenv ipaddr ip地址
(2)设置tftp服务器端的ip地址
setenv serverip 服务器端的地址
开发板和ubuntu之间网络通信(板子Ping ubuntu):
<1>板子IP地址和Ubuntu的IP地址的网络号一样
<2>虚拟机桥接模式
<3>无线网卡禁用
<4>防火墙关闭
-------------------------------------------------------------
还是没有效果:
[1]网线有问题
[2]板子网卡芯片有问题
------------------------------------------------------------
开发板通过tftp从ubuntu下载程序:
<1>ubuntu已经安装过tftp服务
<2>需要下载的文件已经存放在tftp服务指定的工作目录下
<3>在开发板中需要设置serverip (ubuntu的IP地址)
------------------------------------------------------------
如果没有效果:
[1]网络问题
[2]ubuntu的tftp服务死掉----->重启服务
------------------------------------------------------------
(3)保存设置好的环境变量
save
(4)引导Linux内核的命令
tftp 41000000 uImage
tftp 42000000 exynos4412-fs4412.dtb
tftp 43000000 ramdisk.img
bootm 内核在内存地址 ramdisk在内存地址 设备树在内存地址
bootm 41000000 43000000 42000000
注意:
如果没有ramdisk,第二个参数用"-"代替
(5)设置开发板启动后,自动执行的命令(uboot 倒计时完成之后)
setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 41000000 43000000 42000000
ipaddr : 设置板子IP
serverip: 设置tftp的服务端IP
bootcmd : u_boot倒计时之后,自动执行的命令
bootargs: 告诉操作系统挂载文件系统的方式
tftp : 下载文件
bootm : 启动操作系统