第一、二期衔接——7.1 移植3.4.2内核—框架介绍及简单修改

移植3.4.2内核—框架介绍及简单修改

  • 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3)
  • 软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.04_x64 系统
  • 参考资料:《嵌入式Linux应用开发手册》
  • 开发环境:Linux-3.4.2 内核、arm-linux-gcc-4.3.2工具链


一、安装arm-linux-gcc 4.3.2工具链

用root用户登录

1、解压

tar -zxvf arm-linux-gcc-4.3.2 tar.bz2 -C /

这样解压完成后的文件在:/opt/FriendlyARM/toolschain/4.3.2路径下(实际上在哪个目录下都可以)。

2、移动

将上面解压的4.3.2目录拷贝到/usr/local

cd /usr/local 
mkdir arm
chmod 777 arm
cp -r /opt/FriendlyARM/toolschain/4.3.2 /usr/local/arm

3、修改环境变量

vi  /etc/profile
export PATH=$PATH:/usr/local/arm/4.3.2/bin

4、生效

source /etc/profile

5、验证

执行echo $PATH查看环境变量
执行arm-linux-gcc -v查看工具链版本号

6、可能出现的问题及解决办法

  • 问题:
    若系统是32位,则按照以上步骤即可完成。
    若是64位系统,可能会出现以下情况:
    当输入arm-linux-gcc -v 时,出现/usr/local/arm/4.3.2/bin/arm-linux-gcc: line 3: /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: No such file or directory。

  • 原因:
    这是因为64位的系统缺少32位的库导致的。

  • 解决办法:
    sudo apt-get update
    sudo apt-get install lib32z1

这样就可以进行交叉编译了。

二、配置内核

1、解压

上传内核压缩包并解压

tar xjf linux-3.4.2.tar.bz2

得到如下目录linux-3.4.2
在这里插入图片描述

2、内核配置

2.1 修改Makefile

/work/system/linux-3.4.2目录下vi Makefile

在这里插入图片描述

2.2 选择默认配置

在此目录下/work/system/linux-3.4.2/arch/arm/configs会有这个文件s3c2410_defconfig
/work/system/linux-3.4.2目录下,执行make s3c2410_defconfig,最终会的到一个.config文件
在这里插入图片描述

通过vi .config可以看到,生成的配置文件中支持如下2440板子的配置
在这里插入图片描述

2.3 make uImage编译

/work/system/linux-3.4.2目录下,执行make uImage,出现如下错误:
在这里插入图片描述

  • 原因:
    查了一下更新,发现其中有一项是perl版本升级到了 v5.22.1,然后查了perl官方文档,发现官网因为一个bug,该版本将defined(@array)去掉了。可以直接使用数组判断非空。

  • 解决方法:
    打开在/work/system/linux-3.4.2/kernel目录下的timeconst.pl修改:

  • 修改前
    在这里插入图片描述

  • 修改后

  • 在这里插入图片描述

最终内核编译成功
vi

三、烧写

1、问题

直接通过NFS网络系统烧写uImage,开发版启动后出现如下问题:输出的信息乱码

nfs 0x30007FC0 192.168.1.2:/work/nfs_root/first_fs/uImage
bootm 0x30007FC0 

在这里插入图片描述

2、解决办法1:修改波特率

乱码的最可能的原因就是波特率不一致,此时重启启动u-boot,执行如下命令,设置波特率

 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
 save

结果依旧是乱码
在这里插入图片描述

3、解决办法2:设置机器ID

  1. 先执行set machid 16a,这个机器ID是smdk2440(三星工板),可以看到机器ID已经成功设置
    在这里插入图片描述
  2. 重启开发板观察,可以看到此时串口终于有输出了。在这里插入图片描述

4、其他原因

如果此时程序依旧是hi乱码,可能是对应机器ID的内核源码的时钟频率有关

到此为止,新的内核烧写进去,但是无法正常运行,后面会一步步解决这些问题。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章