linux操作系统移植

1.搭建开发阶段linux操作系统流程
(1)准备镜像文件:uboot,tf-a,uimage和设备树镜像文件,根文件系统镜像文件rootfs
(2)将镜像文件烧写到emmc设备中(两种方式:1.通过usb协议将emmc连接到unbuntu进行烧写,2.通过tftp协议传到板子内存,通过mmc write将内存中的镜像文件写到emmc设备),将拨码开关拨到emmc模式
(3)Ubuntu和开发板组网:
(4)将uImage和设备树镜像文件拷贝到tftpboot目录下,并添加最高权限
(5)设置bootcmd和bootargs参数
(6)进入自启动模式,解析bootcmd和bootargs,解析成功后,进入linux操作系统
2.移植内核的步骤
(1)对内核原码解压,进入内核源码目录打补丁,得到设备树文件,将.config文件打入内核原码目录文件夹下,打开makefile配置交叉编译工具链(arch,cross_compite),由于fsmp1a参考的是dk1平台,进入设备树目录将dk1设备树复制为fsmp1a,打开Makefile文件添加fsmp1a平台需要被编译,打开设备树源文件stm32mp157a-fsmp1a.dts,将dkx更改为fsmp1x,st更改为hqyj
(2)在内核源码目录下编译
(3)打开串口工具,进入自启动模式
(4)修改menuconfig,更新uImage和设备树镜像文件的时间戳
(5)设置热插拔      [*] Support for uevent helper  >>>(/sbin/hotplug) path to uevent helper  
(6)重新编译原码
3.测试内核镜像文件
(1)通过tftp传输linux内核镜像文件和设备树镜像文件到板子内存
(2)进入自启动模式,解析bootcmd和bootargs两个参数,将板子内存中的uImage和设备树镜像文件烧写到emmc设备,挂载根文件操作系统成功,进入操作系统则测试成功
4.移植uboot的三条命令
make <board_name>_defconfig:默认板子配置文件,配置信息写在.config文件中
make menuconfig:基于图形化界面配置信息,配置信息写在.config文件中
make all:编译源码
5.ubuntu和开发板如何组成局域网
(1)设置物理ip,setenv ethaddr 
(2)设置menuconfig支持PHY芯片支持物理传输链接设备。   [*]   supports the Maxio MAEXXXX PHY
(3)打开设备树源文件,找到ethernet0设置最大传输速度为100m/s,
(4)ubuntu安装tftp成功,关闭防火墙,关闭杀毒软件,设置网络设备,以太网x为100m全双通
(5)设置ubuntu静态网,桥接模式选择手动,添加网络配置,设置ip地址,子网掩码,网关,dns
(6)在串口工具上设置serverip(tftp服务器ip,ubuntu就是服务器)、ipaddr(单板ip)、gatewayip(网关)、netmask(子网掩码)
(7)ping测试是否连接成功
6.gnu二进制工具集五个作用
(1)创建和管理静态库和动态库
(2)显示和分析二进制文件信息
(3)修改和转换二进制文件
(4)调试支持
(5)符号管理
(1)arm-linux-gnueabihf-gcc -c *.S -o *.o                    只编译不连接
(2)arm-linux-gnueabihf-ld -Ttext=链接地址 *.o -o *.elf                         将.o文件链接为elf可执行文件
(3)arm-linux-gnueabihf-objcopy -O binary *.elf *.bin                      将elf文件生成二进制文件
(4)arm-linux-gnueabihf-objdump -D *.elf >*.dis            将elf文件生成反汇编文件
(5)size查看elf文件各个段大小,readelf 查看头部信息,strip 压缩,nm 查看符号表信息,addr2line 定位段错误信息
7.ubuntu两种启动模式
用户交互和自启动,自启动可以通过设置bootcmd,告诉系统自启动时要执行的指令,用户交互可以手动输入指令来和系统交互
8.如何设置bootcmd:setenv bootcmd 指令1\;指令2
9.如何移植uboot    
    设备树源文件:*.dts ==========> 类似于C语言中的.c文件
    设备树头文件:*.dtsi ==========> 类似于C语言中的.h文件
    设备树编译工具:DTC make dtbs ==========> 类似于C语言中编译工具gcc *.c
    设备树镜像文件:*.dtb ==========> 类似于C语言中的可执行文件a.out
(1)make distclean清除中间文件
(2)打开makefile设置交叉编译为arm架构
(3)make stm32mp15_basic_defconfig执行非安全版本的默认配置文件
(4)进入设备树目录,复制dk1文件为fsmp1a文件
(5)打开设备树源文件,更改dk1为fsmp1a
(6)打开makefile设置fsmp1a需要被编译
(7)插入tf卡,对tf卡分区,将uboot镜像文件烧写到tf卡对应的分区中,弹出tf卡,将板子拨码开关设置为sd卡模式,将tf卡插入板子
(8)解决电源问题
(9)解决内存错误问题
(10)解决tf卡错误
(11)去掉adc电流
(12)移植emmc设备
(13)ubuntu和板子组局域网
(14)对非安全版本进行备份
10.在内核中,如何添加图形化界面信息
(1)将*.c和*.h文件复制到/derivers/char目录下
(2)在/derivers/char目录下打开Kconfig,添加图形化界面信息
(3)在内核原码目录下执行make menuconfig查看是否添加成功
(4)在/derivers/char目录下打开Makefile文件,添加驱动被编译
(5)在内核原码目录下编译,将uimage和设备树镜像文件复制到tftpboot目录下
(6)进入串口工具板子自启动模式,成功进入linux操作系统
(7)将test.h文件和test.c文件复制到nfs目录下的rootfs目录下
(8)在ubuntu将test.c文件编译为arm架构
(9)在串口工具的操作系统上执行a.out文件

11.为什么要使用模块化编译
(1)因为每次编写驱动都需要对uImage重新编译,浪费时间,引入模块化编译,编译驱动生成.ko文件,需要驱动时安装驱动insmod *.ko,不用时卸载insmod *.ko

12.制作根文件系统镜像步骤
(1)在家目录下创建一个64M的镜像文件ramdisk
(2)将ramdisk制作为ext4格式
(3)将ramdisk镜像文件挂载到/mnt目录下
(4)将~/nfs/rootfs目录下的lib文件夹压缩arm-linux-gnueabihf-strip lib/*
(5)将~/nfs/rootfs目录下所有内容拷贝到/mnt目录下
(6)取消挂载
(7)压缩镜像文件得到ramdisk.gz
(8)使用mkimage命令对ramdisk.gz添加64字节的头部信息得到ramdisk.img文件
(9)将ramdisk.img文件拷贝到tftpboot目录下
(10)在串口工具上选emmc设备,使用tftp将ramdisk.img文件拷贝到板子内存
(11)使用mmc part命令查看emmc设备分区信息
(12)使用mmc write命令将内存中的uImage,设备树镜像和ramdisk.img文件写入emmc设备中
(13)修改bootargs和bootcmd参数
(14)重启,进入自启动模式

13.移植非安全版本的uboot步骤
(1)清除中间文件
(2)修改交叉编译工具链
(3)执行非安全版本的默认配置文件
(4)打补丁,生成设备树文件
(5)拷贝dk1设备树文件生成fsmp1a的设备树文件
(6)修改设备树源文件和头文件
(7)添加fsmp1a被编译
(8)编译源码
(9)烧写到对应分区的tf卡中,将板子拨码开关调到tf模式,插入板子调试
(10)解决电源错误,将dk1电源管理内容去掉
(11)修改内存错误信息,打开menuconfig修改默认设备树配置
(12)解决tf卡错误,在设备树头文件中修改sdmm1的信息
(13)打开menuconfig去掉adc检测电流
(14)移植emmc设备驱动,在设备树头文件添加sdmm2
(15)网卡打补丁,设置menuconfig支持PHY芯片支持物理传输链接设备,组局域网
(16)对非安全版本编译生成的.config配置文件备份

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值