linux移植:

1.移植一个linux到ARM上
2.ubuntu上开发应用程序(交叉编译) --- 在A平台上开发编译B平台运行的程序
3.移植应用程序到ARM上 nfs --- 网络文件系统
网络配置:
ubuntu有线连接开发板
1.设置 网络适配器更改为桥接
2.编辑 虚拟网络编辑器Vmnet0桥接到有线网卡
3.修改网络配置文件 sudo vim /etc/network/interfaces
4.重启虚拟机/或网络服务
auto ens33
iface ens33 inet static
address 192.168.1.3
netmask 255.255.255.0
gateway 192.168.1.1
ubuntu有线连接开发板
1.设置 网络适配器更改为NET
2.编辑 虚拟网络编辑器Vmnet0桥接到无线网卡
3.修改网络配置文件 sudo vim /etc/network/interfaces
4.重启虚拟机/或网络服务
auto ens33
iface ens33 inet dhcp
address 192.168.1.3
netmask 255.255.255.0
gateway 192.168.1.1
nfs挂载命令:
开发板端执行 mount -o nolock,nfsvers=3 192.168.1.3:/home/linux/nfs /mnt
注:要使用和平台匹配的编译器编译程序,不匹配则程序不能执行
Linux启动流程:
1.bootloader 是一个为内核启动准备环境的裸机程序,引导内核启动
2.kernel 操作系统的核心(实现整个系统功能的程序)
3.rootfs 加载(挂载)跟文件系统 所有文件的集合 /
1.bootloader(uboot)
---初始化异常向量表
---初始化CPU(工作模式)
---初始化堆
---初始化时钟
---关看门狗
---关闭Cache(数据Cache必关,指令可选)
---关MMU
---关中断
---初始化内存
---初始化相关设备(串口网口)
---集成相关协议
---搬移内核到内存 --- 向内核传参(根文件系统类型,init进程,控制台)
---引导内核启动
---bootload不在控制CPU,CPU控制权移交给内核
2.kernel一个复杂的程序
文件管理 进程管理 内存管理 网络管理 设备管理 IPC进程间通信
内核启动到最后阶段 加载(挂载)根文件系统
启动 init 进程(由内核init进程退化(exec))
init -> 其他进程 -> shell -> userapp
3.rootfs 跟文件系统(第一个挂载的文件系统)
一堆文件的集合
---配置文件
---系统命令
---库
---用户程序
---普通文件(文本、mp3、jpg)
系统上电根据启动模式配置引脚从不同的介质加载bootloader(以SD卡为例)
1.CPU拷贝bootloader前半部分到OCRAM,bootloader在前半部分代码中初始化好内存,并搬移自己后半部分到内存中执行,bootloader执行到最后阶段搬移内核到内存,并引导内核启动
2-1.内核在SD卡中,则bootloader需要在代码中初始化好SD卡,然后读SD的kernel块写入内存
2-2.内核在ubuntu上,则bootloader需要在代码中初始化有线网卡及集成tftp协议,通过tftp协议下载内核到内存
3-1.根文件系统如果在SD卡上,则内核直接挂载SD卡的rootfs分区
3-2.根文件系统在ubuntu上,则内核应该通过nfs挂载ubuntu上的rootfs目录(bootloader向内核传参是应该包含内核启动阶段使用的IP)