Linux系统移植(7.4)
昨日回顾:
系统移植
一、linux系统:
1、u-boot 引导加载内核 2、zImage 内核镜像 3、.dbt设备树文件 4、rootfs 文件系统
二、硬件资源:
im6xull 芯片内部:96k rom(原厂启动代码)、 128k ram(在DDR初始化前为系统提供运行空间) cache(i、d、L2)
芯片外部:512mb DDR(运行空间) 、 8G EMMC(启动代码) 三、启动过程:
1、选择启动模式
2、上电(运行0x00除代码,即96的ROM内的代码)
3、根据启动方式找到对应u-boot
4、将u-boot前面一段代码拷贝到内部128k的RAM运行
5、对DDR初始化
6、将完整的u-boot拷贝到DDR中运行
7、执行u-boot对硬件初始化
8、加载引导启动内核
9、执行0号内核进程
10、运行init进程
11、init进程作为父进程启动其余进程
12、实现文件系统挂载
13、找到用户对应的shell运行终端
四、烧录方法:
烧录地点:sd卡或者EMMC,
烧录软件地点:windows、ubantu
开发过程最佳方式:uboot直接烧录到SD卡
zImage、.dbt通过tftp传到DDR
rootds通过nfs传到共享文件,让板子通过网络访问。
五、环境配置:
1、网络:nat网卡完成下载、 桥接网卡和开发板通信
2、安装apt-get工具集
3、安装minicom软件
4、tftp服务器软件
5、nfs服务器软件
今日学习:
一、开发过程linux系统最佳烧录方式----动态加载
此方法主要是开发时使用,将uboot烧录到SD卡上,并设置为SD卡启动,开发板上电即可启动uboot,然后将zImage放入到tftp管理目录,通过tftp下载zImage和设备树文件到DDR中,并加载内核,最后将文件系统设置在nfs服务器上,内核挂载nfs服务器的文件系统,启动Linux系统。
这样做的目的在于每次下载的zImage和dts设备树文件都是最新裁剪出来的,减少了烧录固化的时间,并且文件系统也是最新版本的,所以这种模式主要用于开发时使用。
操作步骤:
1. 先完成《模式一:烧写到SD卡》,可以将uboot烧写到sd卡中
2. 将开发板设置为sd卡启动
3. 将《驱动资料包\实验镜像文件》中的zImage和imx6ull-alientek-emmc.dtb拷贝到Ubuntu的/home/linux/tftpboot目录下
4. 将《驱动资料包\实验镜像文件》 rootfs.tar.bz2解压到Ubuntu的/home/linux/nfs/rootfs目录下
5. 启动开发板,使用minicom进入uboot界面
6. 设置启动参数
env default -a
saveenv
setenv ipaddr 192.168.1.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.100
saveenv
这段代码完成了开发板的网络基础配置,包括IP地址、MAC地址、网关、子网掩码和服务器地址的设置,为后续通过TFTP下载文件或通过NFS挂载远程文件系统奠定了基础。修正拼写错误后,配置将更加可靠。
测试与Ubuntu是否能够ping通。(需要重启后,重新进一下uboot)
设置bootcmd,让uboot倒计时后通过tftp下载内核镜像和设备树文件。
setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000'
saveenv
设置bootargs对内核传参。
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs
nfsroot=192.168.1.100:/home/linux/nfs/rootfs,proto=tcp rw
ip=192.168.1.50:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off'
saveenv
7. 重新启动开发板,即可进入开发板Linux系统
1. 系统选择SD卡启动
2. 通过加载SD卡中的uboot初始化一些硬件设备
3. 设置uboot参数,并从Ubuntu服务器下载zImage内核镜像和imx6ull-alientek-emmc.dtb设备树文件
4. 内核加载成功后,通过uboot传递给内核的bootargs参数,以nfs的形式挂载Ubuntu的文系统
5. 启动Linux系统成功