Porting:uboot烧写、linux内核烧写、根文件系统烧写:系统移植,nfs同步网络配置
1、什么叫系统移植? 根据硬件的变化,对已有的代码进行少量的修改,该套代码就很容易在新的硬件平台上运行,这个过程就叫做移植。 做移植的前提条件: 1)'对要移植的代码很熟悉; 2)'对目标平台的硬件差异比较清楚。2、移植课程主要内容 1)'u-boot的移植 bootloader:BIOS
·
1、什么叫系统移植?
根据硬件的变化,对已有的代码进行少量的修改,该套代码就很容易在新的硬件平台上运行,这个过程就叫做移植。
做移植的前提条件:
1)'对要移植的代码很熟悉;
2)'对目标平台的硬件差异比较清楚。
2、移植课程主要内容
1)'u-boot的移植
bootloader:<==>BIOS
uboot是bootloader的一种,为操作系统的运行做准备工作:
>>包括必要硬件的初始化工作;
>>加载操作系统;
>>运行操作系统;
vivi:韩国一家公司开发的,也是一种bootloader,针对三星处理器设计的。
2)'linux内核的移植
linux内核的五大功能:
a)内存管理;
b)进程管理及进程间通信;
main ( ) {
// 先创建运行两个线程
}
某个线程中 ( ) {
fork ( ); // 子进程中有 1 个线程(主线程)
// 主进程中有 3 个线程(1个主线程2个创建的线程)
}
$:' ps -T -p PID
c)虚拟文件子系统;<==>文件系统
d)设备驱动管理;
e)网络子系统(很多种类型的网络协议相关的代码);
3)'根文件系统的制作
各种命令行命令(ls rm....)对应的代码的移植。
【目标】
1. 熟悉三部分代码的框架;
2. 理解移植的步骤;
3. 掌握根文件系统的制作方法;
3、开发板烧写实验
注意EMMC的分区。
分区原则:每个分区的大小要大于等于要存储的镜像文件的大小。
EMMC:'nandflash + 控制短路'
开发板中的默认分区:
0--------1M---------65M------------819M---------------8192M
扇区: 0-------0x800-----0x20800--------0x199800---------0x1000000
|--uboot--|----linux----|-----rootfs-----|--------appfs---------|
/* 如果实验有问题,可以尝试重新分区:*/
#:' mmc erase 0 0x1000000
重新执行 3.1 3.2
Kernel panic
...
Rebooting in 5 reconds...
/* 分区命令:*/
#:' fdisk 2 3 0x100000:4000000 4100000:0x2f200000 33300000:0
分3个区
' 重启开发板,查看分区情况。
#:' mmc part
/* 把本地和服务器ip均在TF的ubootpak启动换将下配置 */
#:' setenv ipaddr 192.168.1.6
#:' setenv serverip 192.168.1.8
#:' saveenv
/* 从这个位置上读出linux内核到48000000位置 */
3.1 烧写uboot
空板子:emmc中无任何代码,可以借助TF卡来完成烧写。arm裸板
虚拟机共享porting文件夹
$: cp /mnt/hgfs/porting/env/uboot.bin /tftpboot/
#:' tftp 48000000 uboot.bin
#:' update_mmc 2 2ndboot 0x48000000 0x200 0x555f0
' 拔出TF卡,重启开发板 '
// 2:板子emmc设备。0/1:TF卡槽中的设备
// 2ndboot:指的是uboot分区
// 48000000:源数据地址
// 0x200:写入的偏移位置
// 0x555f0:写入的数据长度
3.2 烧写linux内核
$: cp /mnt/hgfs/proting/env/uImage /tftpbott/
#:' tftp 48000000 uImage
#:' mmc write 48000000 0x800 0x3000
#:' setenv bootcmd mmc read 0x48000000 0x800 0x3000 \; bootm 0x48000000
#:' saveenv
#: help mmc
0x48000000:源数据地址
0x800:要写入的位置(单位是扇区,十进制512)
0x3000:要写入的数据长度(单位是扇区,十进制512)
3.3 烧写根文件系统
$: cp /mnt/hgfs/porting/env/rootfs_ext4.img /tftpboot/
#:' tftp 48000000 rootfs_ext4.img
#:' mmc write 48000000 20800 0x32000
#:' setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 console=ttySAC0,115200 maxcpus=1 lcd=vs070cxn tp=gslx680-linux
root:根文件系统所在设备文件的名称
rootfstype:根文件系统的类型
console:控制台,ttySAC0,uart0控制器
maxcpus:=1,只启动cpu0
lcd:指定lcd的型号
tp:指定触摸屏的型号
#:' saveenv
重启开发板:
用户名:root
密码:123456
#:' cd /
ubuntu上命令:
$: vi hello.c
$: arm-c..<table>..gcc hello.c
$: cp a.out /tftpboot/
开发板上命令:
#: which tftp
#: ifconfig eth0 // 查看ip
#:' ifconfig eth0 192.168.1.6 // 配置开发板上linux的ip
#:' ping 192.168.1.8 // 查看网络连接是否接通
#: tftp -gr a.out 192.168.1.8 // 将a.out拷贝到开发板的linux文件中
#: whoami // 确认是root用户
#: ls -l a.out // a.out被开发板的linux系统保护策略去掉可执行权限了
#:' chmod +x a.out // 添加可执行权限
#: a.out // 执行结果 hello,world!
4、网络nfs网络连接根文件系统
这种方式一般用于开发调试阶段。
4.1 服务器端设置 - PC-ubuntu-linux "在linux没有nfs服务时执行4.1"
1) 安装nfs server
联网:$:' sudo apt-get install nfs-kernel-server
未联网:$:' cd ~/Downloads/nfs/
$:' sudo dpgk -i *.deb
2) 准备根文件系统数据
env/rootfs_qt.tar.bz2
$:' cd /opt/
$:' cp /mnt/hgfs/porting/env/rootfs_qt.tar.bz2 .
$:' sudo tar xvf *.bz2
3) 对服务器进行配置
配置PC机上的哪些目录可以让客户端通过nfs方式访问
$:' sudo vi /etc/exports
/opt/rootfs *(rw,sync,no_root_squash)
'/opt/rootfs':允许客户端通过nfs方式访问的目录
/* ubuntu-linux下操作该目录,即可同步到开发板linux根目录 */
*:所有客户端都可以访问
192.168.1.* 代表客户端IP为192.168.1.X可以访问
rw:客户端对目录有读写权限
sync:同步 // man 2 sync; 重要的write函数写入数据后可加。
no_root_squash:权限,角色
4) 对新的配置重启nfs服务
$:' sudo /etc/init.d/nfs-kernel-server restart
// 看到4个 [ OK ] 重启成功。
4.2 客户端设置 - 开发板
#:' reboot
// 进入u-boot的命令行,3秒倒计时按空格
#:' setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/opt/rootfs ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0 lcd=vs070cxn tp=gslx680-linux console=ttySAC0,115200 maxcpus=1
/dev/nfs:属于固定写法。只要是nfs方式挂在网络文件系统
#:' saveenv
// uboot下 re 命令,不做任何操作等待 starting kernel启动完全
#:' re
Welcome to X6818
tarena login: root
Password: 123456
成功!!!
#:' cd /
根据硬件的变化,对已有的代码进行少量的修改,该套代码就很容易在新的硬件平台上运行,这个过程就叫做移植。
做移植的前提条件:
1)'对要移植的代码很熟悉;
2)'对目标平台的硬件差异比较清楚。
2、移植课程主要内容
1)'u-boot的移植
bootloader:<==>BIOS
uboot是bootloader的一种,为操作系统的运行做准备工作:
>>包括必要硬件的初始化工作;
>>加载操作系统;
>>运行操作系统;
vivi:韩国一家公司开发的,也是一种bootloader,针对三星处理器设计的。
2)'linux内核的移植
linux内核的五大功能:
a)内存管理;
b)进程管理及进程间通信;
main ( ) {
// 先创建运行两个线程
}
某个线程中 ( ) {
fork ( ); // 子进程中有 1 个线程(主线程)
// 主进程中有 3 个线程(1个主线程2个创建的线程)
}
$:' ps -T -p PID
c)虚拟文件子系统;<==>文件系统
d)设备驱动管理;
e)网络子系统(很多种类型的网络协议相关的代码);
3)'根文件系统的制作
各种命令行命令(ls rm....)对应的代码的移植。
【目标】
1. 熟悉三部分代码的框架;
2. 理解移植的步骤;
3. 掌握根文件系统的制作方法;
3、开发板烧写实验
注意EMMC的分区。
分区原则:每个分区的大小要大于等于要存储的镜像文件的大小。
EMMC:'nandflash + 控制短路'
开发板中的默认分区:
0--------1M---------65M------------819M---------------8192M
扇区: 0-------0x800-----0x20800--------0x199800---------0x1000000
|--uboot--|----linux----|-----rootfs-----|--------appfs---------|
/* 如果实验有问题,可以尝试重新分区:*/
#:' mmc erase 0 0x1000000
重新执行 3.1 3.2
Kernel panic
...
Rebooting in 5 reconds...
/* 分区命令:*/
#:' fdisk 2 3 0x100000:4000000 4100000:0x2f200000 33300000:0
分3个区
' 重启开发板,查看分区情况。
#:' mmc part
/* 把本地和服务器ip均在TF的ubootpak启动换将下配置 */
#:' setenv ipaddr 192.168.1.6
#:' setenv serverip 192.168.1.8
#:' saveenv
/* 从这个位置上读出linux内核到48000000位置 */
3.1 烧写uboot
空板子:emmc中无任何代码,可以借助TF卡来完成烧写。arm裸板
虚拟机共享porting文件夹
$: cp /mnt/hgfs/porting/env/uboot.bin /tftpboot/
#:' tftp 48000000 uboot.bin
#:' update_mmc 2 2ndboot 0x48000000 0x200 0x555f0
' 拔出TF卡,重启开发板 '
// 2:板子emmc设备。0/1:TF卡槽中的设备
// 2ndboot:指的是uboot分区
// 48000000:源数据地址
// 0x200:写入的偏移位置
// 0x555f0:写入的数据长度
3.2 烧写linux内核
$: cp /mnt/hgfs/proting/env/uImage /tftpbott/
#:' tftp 48000000 uImage
#:' mmc write 48000000 0x800 0x3000
#:' setenv bootcmd mmc read 0x48000000 0x800 0x3000 \; bootm 0x48000000
#:' saveenv
#: help mmc
0x48000000:源数据地址
0x800:要写入的位置(单位是扇区,十进制512)
0x3000:要写入的数据长度(单位是扇区,十进制512)
3.3 烧写根文件系统
$: cp /mnt/hgfs/porting/env/rootfs_ext4.img /tftpboot/
#:' tftp 48000000 rootfs_ext4.img
#:' mmc write 48000000 20800 0x32000
#:' setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 console=ttySAC0,115200 maxcpus=1 lcd=vs070cxn tp=gslx680-linux
root:根文件系统所在设备文件的名称
rootfstype:根文件系统的类型
console:控制台,ttySAC0,uart0控制器
maxcpus:=1,只启动cpu0
lcd:指定lcd的型号
tp:指定触摸屏的型号
#:' saveenv
重启开发板:
用户名:root
密码:123456
#:' cd /
ubuntu上命令:
$: vi hello.c
$: arm-c..<table>..gcc hello.c
$: cp a.out /tftpboot/
开发板上命令:
#: which tftp
#: ifconfig eth0 // 查看ip
#:' ifconfig eth0 192.168.1.6 // 配置开发板上linux的ip
#:' ping 192.168.1.8 // 查看网络连接是否接通
#: tftp -gr a.out 192.168.1.8 // 将a.out拷贝到开发板的linux文件中
#: whoami // 确认是root用户
#: ls -l a.out // a.out被开发板的linux系统保护策略去掉可执行权限了
#:' chmod +x a.out // 添加可执行权限
#: a.out // 执行结果 hello,world!
4、网络nfs网络连接根文件系统
这种方式一般用于开发调试阶段。
4.1 服务器端设置 - PC-ubuntu-linux "在linux没有nfs服务时执行4.1"
1) 安装nfs server
联网:$:' sudo apt-get install nfs-kernel-server
未联网:$:' cd ~/Downloads/nfs/
$:' sudo dpgk -i *.deb
2) 准备根文件系统数据
env/rootfs_qt.tar.bz2
$:' cd /opt/
$:' cp /mnt/hgfs/porting/env/rootfs_qt.tar.bz2 .
$:' sudo tar xvf *.bz2
3) 对服务器进行配置
配置PC机上的哪些目录可以让客户端通过nfs方式访问
$:' sudo vi /etc/exports
/opt/rootfs *(rw,sync,no_root_squash)
'/opt/rootfs':允许客户端通过nfs方式访问的目录
/* ubuntu-linux下操作该目录,即可同步到开发板linux根目录 */
*:所有客户端都可以访问
192.168.1.* 代表客户端IP为192.168.1.X可以访问
rw:客户端对目录有读写权限
sync:同步 // man 2 sync; 重要的write函数写入数据后可加。
no_root_squash:权限,角色
4) 对新的配置重启nfs服务
$:' sudo /etc/init.d/nfs-kernel-server restart
// 看到4个 [ OK ] 重启成功。
4.2 客户端设置 - 开发板
#:' reboot
// 进入u-boot的命令行,3秒倒计时按空格
#:' setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/opt/rootfs ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0 lcd=vs070cxn tp=gslx680-linux console=ttySAC0,115200 maxcpus=1
/dev/nfs:属于固定写法。只要是nfs方式挂在网络文件系统
#:' saveenv
// uboot下 re 命令,不做任何操作等待 starting kernel启动完全
#:' re
Welcome to X6818
tarena login: root
Password: 123456
成功!!!
#:' cd /
更多推荐
已为社区贡献2条内容
所有评论(0)