1. SAM A5 Linux移植实验
1.1 实验目的
· 掌握Linux内核的配置、编译和安装方法,U-Boot引导内核启动;
· 掌握文件系统制作,能够启动图形界面;
1.2 实验内容
· 配置、编译和安装Linux kernel
· 制作Yocto 系统到SD卡
· 启动Yocto系统
1.3 步骤与现象
· 内核制作
1. 从空享文件夹把内核压缩包复制到 /home/SAMA5/hello_world目录下
![80297d3051ac0ec7b9a07895a373517a.png](https://i-blog.csdnimg.cn/blog_migrate/c9acaf9d56dfa7986cb4331ead4fdbe0.jpeg)
2. 进入/home/SAMA5/hello_world目录,解压
![5ee5b88416419ce62002f2ca712e414b.png](https://i-blog.csdnimg.cn/blog_migrate/b47a54cefafc4d5bc69a1414a409fd3c.jpeg)
3. 进入内核源码目录
![e48278d8978f567ce5f65f865e699e3d.png](https://i-blog.csdnimg.cn/blog_migrate/4f8105079245bf26e667efbe2dd80008.jpeg)
4. 设置交叉编译环境
![0a5e326e6fa2b6836881d935dccecb84.png](https://i-blog.csdnimg.cn/blog_migrate/5f91bc512a6f869f9d3a7695fa5f3eb6.jpeg)
5. 配置内核 make ARCH=arm sama5_defconfig
![71e5eb59b8b4f71569bf60a097c99861.png](https://i-blog.csdnimg.cn/blog_migrate/349490ed629f909af856f91ddd5dfd90.jpeg)
6. 编译内核 make ARCH=arm
![f27bb76e42d01c13a3064dec1b5d895e.png](https://i-blog.csdnimg.cn/blog_migrate/0cf7ad09cadc168d328726ca1d4a3d40.jpeg)
7. 编译内核出错,出现fatal error: openssl/名单.h: No such file or directory。
原因是libssl-dev~没有安装libssl-dev包含libraries, header files and manpages,是openssl的一部分。
![dfddac934f0aa748b2e1a0061ac05cf2.png](https://i-blog.csdnimg.cn/blog_migrate/3b7fa99b5b6a60471f3b91bf9dbfd34f.jpeg)
8. sudo apt-get install libssl-dev来安装libssl-dev
![c4fc6cef24a21848bf7856f846862f3f.png](https://i-blog.csdnimg.cn/blog_migrate/999a079b5b6a9b1969e2b90a2c9483a1.jpeg)
9. 内核编译完成,拷贝内核镜像zImage和设备树文件at91-sama5d4_xplained.dtb到共享文件夹
![a8cebf442f1b85209193b0985c31d265.png](https://i-blog.csdnimg.cn/blog_migrate/4fe8a9ea8946be0e57311563fa39a661.jpeg)
![9b703d31f76ecedd4a2cf7b4cdbec314.png](https://i-blog.csdnimg.cn/blog_migrate/f2b4b73c1b0a1b9f7295d6039fd6d1a7.jpeg)
10. 复制内核到SD卡,启动内核
![9aaa452c9a721c178f581a9701625de3.png](https://i-blog.csdnimg.cn/blog_migrate/deb119d00f105d255a5ae1af0e5cf687.jpeg)
1.4 关键代码分析
(1) 命令提醒
tar.gz格式的压缩文件
解压:[******] $ tar -zxvf FileName.tar.gz
压缩:[******] $ tar -zcvf FileName.tar.gz DirName
解压文件到指定目录:
[******]$ tar -zxvf FileName.tar.gz -C /***/***
(2) 应用测试:
![d7d4491e6ca0286b2395d00ddf4ae7ab.png](https://i-blog.csdnimg.cn/blog_migrate/47b72c4ea583a674522470dcf440b28d.jpeg)
![72c5f30be1bd2d551516cf371e05469b.png](https://i-blog.csdnimg.cn/blog_migrate/96f6b6ccc15176f44f3c0f17806efa5f.jpeg)
· 在虚拟机上使用交叉编译工具链 arm-linux-gnueabi-gcc 编译生成的 helloarm 可执行文件,移植到开发板执行时报错:
![0096d22214df55401d9525a0725fb2b2.png](https://i-blog.csdnimg.cn/blog_migrate/56e6e718eb46821ae8525d56a7d6c888.jpeg)
· 确定文件权限没问题,输入 file hello 显示如下:
![c5671461104f2a63020d1ca5da8cc703.png](https://i-blog.csdnimg.cn/blog_migrate/7160b410e4c4f4ee17278da608504c25.jpeg)
· 输入 ls -l
![c45f7ae33491e6db885e2e080d26a7ef.png](https://i-blog.csdnimg.cn/blog_migrate/1e6cbab70c4d9cdcf271204914f8fb0f.jpeg)
· 发现 ld-linux-armhf.so.3 是一个链接符号,指向 ,而 ld-linux.so.3也是一个链接符号,于是将 ld-linux.so.3也链接到 ,输入ln -s ld-linux.so.3,再输入ls -l ,输出如下结果:
![cf3be310dc0f5a13ffce3c928fbb6c55.png](https://i-blog.csdnimg.cn/blog_migrate/06c2a26f94cdb9d267153e180a3243ee.jpeg)
· 执行./helloarm,可以正常运行
![635ccb3fbb7da6e6fa65bfc87dfb77b2.png](https://i-blog.csdnimg.cn/blog_migrate/986e5e627a5b731406e95ad0c5b0fa94.jpeg)
![bac91ffff7f05f4e7f0a759e6e1aa6ef.png](https://i-blog.csdnimg.cn/blog_migrate/6a1bca1d70e72d6afb0c0ab36f59772b.jpeg)