总结关于arm开发板的linux操作系统移植

时间:2024-03-13 08:08:22

1.crossstool-ng制作arm920t制作交叉编译器:

1,下载crosstool-ng压缩包,解压进入
2,编译三部曲(当前目录)
3,配置menuconfig(设置交叉编译器版本,安装路径,资源获取路径(tarballs)等
4,编译(./ct-ng)

2.buildroot制作arm920t制作交叉编译器:

1,下载buildroot压缩包,解压进入
2,配置menuconfig
3,配置menuconfig(设置交叉编译器版本,安装路径,资源获取路径(dl)等
4,编译(make)

3.fl2440的u-boot制作

1,下载u-boot压缩包,解压进入
2,压缩包中有Makefile,打开Makefile文件,修改ARCH为arm和编译器路径为交叉编译器路径
3,make生成u-boot.bin文件(可移植文件)

4,fl2440的Linux内核制作

1,下载linux内核压缩包,解压进入
2,修改相关源码为所用开发板所需要类型
3,压缩包中有Makefile,打开Makefile文件,修改ARCH为arm和编译器路径为交叉编译器路径
4,修改menuconfig配置
5,make
6,执行相应命令生成linuxrom-s3c2440.bin的镜像文件(可移植文件)

5,根文件系统制作

1,创建根文件系统树目录结构
2,安装交叉编译器中动态库到目录树的lib中
3,安装busybox压缩包,解压进入(busybox集成了Linux系统的常用Linux命令和工具软件(ls,cd,vim,ifconfig…)
4,压缩包中有Makefile,直接make menuconfig配置相应参数
5,make+make install
6,在根文件系统下创建相应文件(dev,var,etc(inittab,fstab,hostname,init.d(rcS…),shell,group,passwd,shadow…)

6initramfs根文件系统制作

1,修改Linux内核menuconfig相应配置
2,编译生成.bin镜像文件,便可移植
3,由于initramfs文件系统的特殊性,系统烧录后,需读取的Linux内核大小可能要自己修改

7.jffs2,ubifs根文件系统制作:
7.1,创建mtd-utils的工作路径

1,编译lzo库(编译安装到install目录下)
2,编译zlib库(编译安装到install目录下)
3,编译e2fsprogs库(libuuid)(编译安装到install目录下)

7.2,编译mtd-utils并安装mkfs.jffs2和mkfs.ubifs

1,下载mtd压缩包,解压进入
2,修改环境变量,加入intsall下的include和lib路径
3,make
4,安装mkfs.jffs2和mkfs.ubifs到/bin下

7.3,修改Linux内核配置文件分区表(可不配置)
7.4,jffs2根文件系统制作

1,利用mkfs.jffs2相应工具生成根文件系统镜像文件
2,重新配置内核参数并编译生成镜像文件
3,移植u-boot,和内核,根文件系统(不能重启)
4,设置bootcmd和bootargs参数
5,重启开发板

7.5,ubifs根文件系统制作

1,利用ubifs相应工具生成根文件系统镜像文件
2,重新配置内核参数并编译生成镜像文件
3,移植u-boot,和内核,根文件系统(不能重启)
4,设置bootcmd和bootargs参数
5,重启开发板

再讲一下开发板上烧录命令:

总结关于arm开发板的linux操作系统移植
在开发板完全未开发时,由于此时内存,nandflash都没初始化,只有SRAM是不需要初始化的,必须写入U-boot前4k的代码到SRAM上,该代码用来初始化内存和nandflash,由于内存SDRAM时不可用的,只能使用SRAM,此时不能使用串口操作,只能使用J-link直接操作CPU执行SRAM内部代码初始化SRAM和nandflash:
我们将制作好的u-boot镜像(.bin)文件加载到内存的0地址,并执行它初始化内存)
总结关于arm开发板的linux操作系统移植
loadbin将代码写道SRAM相应地址,SRAM只有4k,所以加载整个u-boot到SRAM0地址,实际上只加载了前4k的代码
setpc表示程序计数器指向0地址(则下一条将要执行的命令就是0地址的u-boot前4k初始化代码)
g表示run,开始执行0地址开始的代码

执行完后,内存已经初始化,此时,我们再将u-boot的全部代码加载到SDRAM的33f80000地址,
loadbin+setpc+g:u-boot启动:
总结关于arm开发板的linux操作系统移植
此时串口这边可以看到进入到u-boot界面:(串口一定是从J-Link连接时就连接在开发板上)
总结关于arm开发板的linux操作系统移植
此时不能reset(u-boot界面重启命令,相当于Linux的reboot),因为u-boot此时还只是在SDRAM中,断电会丢失,必须写到硬盘中。
此时在串口登录的ssh下操作,写入u-boot,linux内核,以及根文件系统到nandflash。
u-boot提供命令tftp能通过网线连接的主机上下载文件到开发板SDRAM上,
先配置pc和开发板u-boot的ip地址:

[[email protected]]# set ethaddr 00:11:22:33:44:55
[[email protected]]# set ipaddr 192.68.2.168//开发板u-boot下的ip地址
[[email protected]]# set serverip 192.168.2.8//pc端的ip地址
[[email protected]]# save//保存
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x60000 -- 100% complete.
Writing to Nand... done

此时可以通过tftp在pc上下载文件了,(pc上要有相应的tftp软件来启动服务)
先写入u-boot到nandflash:

[[email protected]]# tftp 30008000 u-boot-s3c2440.bin//下载到SDRAM30008000地址
[[email protected]]# nand erase 0 100000//擦除nandflash的0到100000地址空间(nandflash要先擦再写入)
[[email protected]]# nand write 30008000 0 30000//将SDRAM的30008000地址出的数据写入到nandflash的0地址,写入大小要比下载的u-boot.bin文件大

再写入linux内核文件:(如果重新设置了分区,相应的写入地址也会发生变化)

[[email protected]]# tftp 30008000 linuxrom-s3c2440.bin
[[email protected]]# nand erase 100000//擦除nandflash100000地址后所有空间
[[email protected]]# nand write 30008000 100000  300000

如果这里是使用initramfs做的根文件系统,系统可能比较大,由于u-boot默认设置在加载linux内核时,只读取400000大小linux内核,导致内核没能完整读入,系统不能正常启动。此时需要在此界面设置相应参数,保证能读入完整linux内核。。。

最后写入文件系统:(以ubifs为例)(如果重新设置了分区,相应的写入地址也会发生变化)

[[email protected]]# tftp 30008000 rootfs-ubifs.bin
[[email protected]]# nand erase 1000000
[[email protected]]# nand write 30008000 1000000  900000

最后还需要根据根文件系统类型修改bootargs参数并保存:

[[email protected]]# set bootargs 'console=tty0 console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs mem=64M noinitrd rw loglevel=7'
[[email protected]]# save

最后重启:

[[email protected]]# reset
...
dm9000 dm9000.0: eth0: link down
dm9000 dm9000.0: eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1

Copyright (C) 2012 LingYun I.o.T Studio< iot-yun.com >
Default Logon Username: root  Password: 123456

LingYunFL2440 login: root
Password: 
~ >: ls
apps     dev      init     mnt      sbin     usr
bin      etc      lib      proc     sys      var
data     info     linuxrc  root     tmp

成功登录。以后再开机,系统就会自动如下执行:
总结关于arm开发板的linux操作系统移植