Linux-4.9.2内核在mini2440上的移植(三)——编译环境测试

2020-05-20来源: eefocus关键字:Linux-4  9  2内核  mini2440  移植  编译环境

3.1 linux-4.9.2源码获取

为什么选择4.9.2移植呢?


因为太新的linux源码yaffs文件系统跟不上,编译过程会导致大量错误无法使用,所以选择比较新的源码就可以了。具体的说明到移植yaffs文件系统时再说。


我们的工作目录定在/root下面,进入到目录


root@ubuntu:/home/ubuntu# cd   /root


(1)下载linux4.9.2源码


root@ubuntu:~#  wget  https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.2.tar.gz


(2)解压源码


root@ubuntu:~ #  tar  -zxvf  linux-4.9.2.tar.gz


(3)修改环境变量


root@ubuntu:~# cd  linux-4.9.2/


root@ubuntu:~/linux-4.9.2# vim  Makefile


定位到255行,原来的内容是


ARCH            ?= $(SUBARCH)


CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)


如果是使用ubuntu指令安装的arm-linux-gnueabihf-gcc就改为


ARCH            ?= arm


CROSS_COMPILE   ?= arm-linux-gnueabihf-


手动安装的arm-linux-gcc 4.4.3就改为


ARCH            ?= arm


CROSS_COMPILE   ?= arm-linux-


保存退出ESC :wq


3.2编译测试

设置目标板型号


root@ubuntu:~/linux-4.9.2# make  mini2440_defconfig


这时会提示:


The program 'make' can befound in the following packages:


 * make


 * make-guile


Try: apt install


 


原因:没有安装make工具,安装一下


root@ubuntu:~/linux-4.9.2#apt  install  make


再重试,又出错


root@ubuntu:~/linux-4.9.2#make  mini2440_defconfig


  HOSTCC scripts/basic/fixdep


/bin/sh: 1: gcc: not found


scripts/Makefile.host:107:recipe for target 'scripts/basic/fixdep' failed


make[1]: ***[scripts/basic/fixdep] Error 127


Makefile:448: recipe fortarget 'scripts_basic' failed


make: *** [scripts_basic]Error 2


原因:缺少32位的库


解决方法:安装libncurses5等关键库


root@ubuntu:~/linux-4.9.2#apt  install  libncurses5-dev


root@ubuntu:~/linux-4.9.2# apt-get  install  libx11-dev:i386 libreadline6-dev:i386


root@ubuntu:~/linux-4.9.2#apt-get install build-essential


root@ubuntu:~/linux-4.9.2# apt-get  install  lib32stdc++6


root@ubuntu:~/linux-4.9.2# apt-get  install  lib32z1


再次运行


root@ubuntu:~/linux-4.9.2# make  mini2440_defconfig


  HOSTCC scripts/basic/fixdep


  HOSTCC scripts/kconfig/conf.o


  SHIPPED scripts/kconfig/zconf.tab.c


  SHIPPED scripts/kconfig/zconf.lex.c


  SHIPPED scripts/kconfig/zconf.hash.c


  HOSTCC scripts/kconfig/zconf.tab.o


  HOSTLD scripts/kconfig/conf


#


# configuration written to.config


#


OK,可以了,开始编译测试,这里使用-j8表示使用8个线程进行编译,可以大幅加快编译的速度,-j后面的数值可以根据你的虚拟机设置的实际情况进行选择,一般等于虚拟机的cpu核心数即可,我的虚拟机设置了8个CPU核心,所以-j8


root@ubuntu:~/linux-4.9.2# make  -j8


又报错


/bin/sh: 1: bc: not found


Kbuild:67: recipe fortarget 'include/generated/timeconst.h' failed


解决方法:安装bc


root@ubuntu:~/linux-4.9.2#apt  install  bc


再次编译,可以运行


可以看到编译过程中CPU已经满载

3.3 为uImage创建脚本

查看zImage生成情况


root@ubuntu:~/linux-4.9.2# cd  arch/arm/boot/


root@ubuntu:~/linux-4.9.2/arch/arm/boot#  ls


bootp  compressed dts  Image  install.sh Makefile  zImage


 


可以看到,生成了zImage


我们的平台使用uboot作为BootLoader,所以需要转换为uImage使用。


 


(1)先安装u-boot转换uimage工具


root@ubuntu:~/linux-4.9.2/arch/arm/boot#  apt-get   install   u-boot-tools


 


(2)再到Linux源码根目录


root@ubuntu:~/linux-4.9.2/arch/arm/boot#  cd   ../../..


 


(3)创建脚本


root@ubuntu:~/linux-4.9.2 #  vim   mkuImage.sh


 


(4)粘贴如下内容


mkimage -A arm -O linux -Tkernel -C none -a 0x30008000 -e 0x30008040 -n mini2440 -d /root/linux-4.9.2/arch/arm/boot/zImage  /root/tftp/uImage


 


(5)赋予可执行权限


root@ubuntu:~/linux-4.9.2# chmod   a+x   mkuImage.sh


 


(6)运行


root@ubuntu:~/linux-4.9.2#  ./mkuImage.sh


 


(7)查看,确认脚本有效


root@ubuntu:~/linux-4.9.2# ls   /root/tftp/


uImage


 


可以看到,tftp文件夹下面已经存在了一个uImage


 


3.4运行测试

在本系统中,使用了uboot引导,所以要先将uboot烧写进入到nand flash中,然后打开secureCRT,设置好串口。


将开发板上电,按空格进入到uboot控制台,查看一下环境变量


[U-boot@mini2440A]#printenv


 


bootdelay=1


baudrate=115200


ethaddr=08:00:3e:26:0a:5b


gatewayip=192.168.1.1


netmask=255.255.255.0


xujun=bmp d 70000


 stdin=serial


ethact=dm9000


ipaddr=192.168.2.188


serverip=192.168.2.123


bootcmd=tftp 0x30008000uImage;bootm 0x30008000


bootargs=console=ttySAC0,115200n8root=/dev/nfs nfsroot=192.168.2.123:/home/ubuntu/NFS/myrootfs/rootfsip=192.168.2.188:192.168.2.123:192.168.2.1:255.255.255.0:SMDK2440A.arm9.net:eth0:offinit=/linuxrc


stdin=serial


stdout=serial


stderr=serial


 


Environment size:479/131068 bytes


 


我们的目的是上电之后,uboot直接从tftp文件夹内读取uImage,并启动内核,所以需要配置以下几点


1、设置开发板的ip(根据你的路由网段设置)


[U-boot@mini2440A]# setenv  ipaddr  192.168.2.188


 


2、设置服务器的ip(根据实际ip设置)


[U-boot@mini2440A]# setenv  serverip  192.168.2.104


 


3、设置uboot,tftp加载内核(tftp 是你的tftp文件夹名字)


[U-boot@mini2440A]# setenv  bootcmd  'tftp 0x30008000 uImage;bootm 0x30008000'


 


4、保存参数


[U-boot@mini2440A]# saveenv


Saving Environment toNAND...


Erasing Nand...


Erasing at 0x4000000000002--   0% complete.


Writing to Nand... done


 


启动测试


[U-boot@mini2440A]# boot


dm9000 i/o: 0x20000300, id:0x90000a46


DM9000: running in 16 bitmode


MAC: 08:00:3e:26:0a:5b


could not establish link


Using dm9000 device


TFTP from server192.168.2.104; our IP address is 192.168.2.188


Filename 'uImage'.


Load address: 0x30008000


Loading: #################################################################


        #################################################################


        #################################################################


         ##########


done


Bytes transferred = 3006872(2de198 hex)


## Booting kernel fromLegacy Image at 30008000 ...


   Image Name:  mini2440


   Created:     2017-09-27   7:06:46 UTC


   Image Type:  ARM Linux Kernel Image (uncompressed)


   Data Size:   3006808 Bytes =  2.9 MB


   Load Address: 30008000


   Entry Point: 30008040


   Verifying Checksum ... OK


   XIP Kernel Image ... OK


OK


 


Starting kernel ...


 


Booting Linux on physicalCPU 0x0


Linux version 4.9.2(root@ubuntu) (gcc version 6.3.0 20170406 (Ubuntu/Linaro 6.3.0-12ubuntu2) ) #1Tue Sep 26 23:51:32 PDT 2017


CPU: ARM920T [41129200]revision 0 (ARMv4T), cr=c000717f


CPU: VIVT data cache, VIVTinstruction cache


Machine: MINI2440


Memory policy: Data cachewriteback


CPU S3C2440A (id0x32440001)


Built 1 zonelists in Zoneorder, mobility grouping on.  Totalpages: 16256


Kernel command line:console=ttySAC0,115200n8 root=/dev/nfsnfsroot=192.168.2.123:/home/ubuntu/NFS/myrootfs/rootfsip=192.168.2.188:192.168.2.123:192.168.2.1:255.255.255.0:SMDK2440A.arm9.net:eth0:offinit=/linuxrc


PID hash table entries: 256(order: -2, 1024 bytes)


Dentry cache hash tableentries: 8192 (order: 3, 32768 bytes)


Inode-cache hash tableentries: 4096 (order: 2, 16384 bytes)


Memory: 58868K/65536Kavailable (4309K kernel code, 180K rwdata, 976K rodata, 176K init, 258K bss,6668K reserved, 0K cma-reserved)


Virtual kernel memorylayout:


    vector : 0xffff0000 - 0xffff1000   (   4 kB)


    fixmap : 0xffc00000 - 0xfff00000   (3072kB)


    vmalloc : 0xc4800000 - 0xff800000   ( 944 MB)


    lowmem : 0xc0000000 - 0xc4000000   (  64 MB)


    modules : 0xbf000000 - 0xc0000000   (  16MB)


      .text : 0xc0008000 - 0xc043d660   (4310 kB)


      .init : 0xc0552000 - 0xc057e000   ( 176 kB)


      .data : 0xc057e000 - 0xc05ab320   ( 181 kB)


       .bss : 0xc05ab320 - 0xc05ebf00   ( 259 kB)


SLUB: HWalign=32,Order=0-3, MinObjects=0, CPUs=1, Nodes=1


NR_IRQS:103


S3C2440: IRQ Support


irq: clearing pendingstatus 00000003


irq: clearing pendingstatus 00000002


sched_clock: 16 bits at1012kHz, resolution 987ns, wraps every 32362962ns


clocksource:samsung_clocksource_timer: mask: 0xffff max_cycles: 0xffff, max_idle_ns:28803037 ns


Console: colour dummydevice 80x30


Calibrating delay loop...201.52 BogoMIPS (lpj=503808)


pid_max: default: 32768minimum: 301


Mount-cache hash tableentries: 1024 (order: 0, 4096 bytes)


Mountpoint-cache hash tableentries: 1024 (order: 0, 4096 bytes)


CPU: Testing write buffercoherency: ok


Setting up static identitymap for 0x300081e0 - 0x30008238


clocksource: jiffies: mask:0xffffffff max_cycles: 0xffffffff, max_idle_ns: 9556302231375000 ns


NET: Registered protocolfamily 16


DMA: preallocated 256 KiBpool for atomic coherent allocations


cpuidle: using governorladder


MINI2440: Option stringmini2440=0tb


MINI2440: 't' ignored,touchscreen not compiled in


MINI2440: LCD


 [0:240x320]


 1:800x480


 2:1024x768


 3:320x240


 


S3C2440: Initialisingarchitecture


usbcore: registered newinterface driver usbfs


usbcore: registered newinterface driver hub


usbcore: registered newdevice driver usb


s3c-i2c s3c2440-i2c.0:slave address 0x10


s3c-i2c s3c2440-i2c.0: busfrequency set to 98 KHz


s3c-i2c s3c2440-i2c.0:i2c-0: S3C I2C adapter


Advanced Li

[1] [2]
关键字:Linux-4  9  2内核  mini2440  移植  编译环境 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic497712.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:Linux-4.9.2内核在mini2440上的移植(二)Ubuntu编译环境搭建(下)
下一篇:基于mini2440的mp3播放器

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Linux-4.9.2内核在mini2440上的移植(二)Ubuntu编译环境搭建(下)
2.1安装arm-linux-编译器编译器在ubuntu环境下可以使用apt命令自动安装,也可以下载独立的安装包手动安装,这两种安装方式都可以实现内核编译,不同版本的arm-linux-gcc可以在系统中共存。本文会介绍这两种安装方法。任一种编译器都能编译内核,推荐使用第一种方法。这里我们规定一下,所有的命令前的“#”表示使用root权限执行,登录系统后使用sudo -i切换为root权限,#后面的内容是实际指令,复制粘贴到putty中执行即可。(1)自动安装编译器~# apt-get  install gcc-arm-linux-gnueabihf安装完成后,查看是否安装
发表于 2020-05-20
Linux-4.9.2内核在mini2440上的移植(二)Ubuntu编译环境搭建(下)
内核裁剪,arm_mini2440开发板中增删自己写的驱动
development boards"    //依赖    depends on MACH_MINI2440    //y表默认编译进内核    default y if MACH_MINI2440    //菜单中的帮助提示    help    this is buttons driver for FriendlyARM Mini1711 development boards单选:choice。。。。。。endchoice4、查看配置项是否更改成功在/home/mini2440
发表于 2020-05-22
移植较新(Linux3.19)内核至mini2440开发板(一)
下面开始正题注:内核启动时可能会出现乱码,可以在u-boot下设置如下环境变量:setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200saveenv 1.1下载Linux3.19的源代码从Linux kernel的官方网站可以下载最新的内核代码,我们选择linux-3.19.4.tar.gz这个文件下载。下载后解压至工作目录。进入内核目录,打开Makefile文件,修改如下两行:-ARCH ?= $(SUBARCH)-CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"
发表于 2020-05-20
华为不造车却深入每辆车,自动驾驶内核获ASIL D认证
据悉,华为自动驾驶操作系统内核(含虚拟化机制)获得 Safety 领域最高等级功能安全认证(ISO 26262 ASIL D),这是我国首个获得 ASIL D 认证的操作系统内核。 在去年 9 月该内核还获得了 Security 领域最高等级信息安全认证(CC EAL 5+)。至此,华为自动驾驶操作系统内核已成为业界首个拥有 Security 与 Safety 双高认证的商用 OS 内核。  据了解,华为公司正与欧洲、日本和中国的汽车厂商合作,计划最早于 2021 年推出自动驾驶汽车。华为自动驾驶操作系统内核功能安全 ASIL-D 认证的获得,是华为在智能汽车解决方案业务领域的重大业务进展。 
发表于 2020-05-20
华为不造车却深入每辆车,自动驾驶内核获ASIL D认证
(mini2440)建立交叉编译环境+配置linux内核
./hello(二)安装源代码及其他工具创建工作目录(以下都为root环境下):# mkdir -p /opt/FriendlyARM/mini24401>>解压安装linux内核源代码# cd  /opt/FriendlyARM/mini2440# tar xvzf /home/lianghuiyong/Linux_share/linux-2.6.32.2-mini2440-20100106.tar.gz2>>解压安装嵌入式图形系统qtopia源代码# cd /opt/FriendlyARM/mini2440# tar xvzf /home/lianghuiyong/Linux_share
发表于 2020-05-18
(mini2440)建立交叉编译环境+配置linux内核
一起学mini2440裸机开发(三)--S3C2440时钟学习
前言首先,我们应该知道一点,mini2440开发板在没有开启时钟前,整个开发板全靠一个12MHz的外部晶振提供频率来工作运行的,也就是说CPU、内存、UART、ADC等所有需要用到时钟频率的硬件都工作在12MHz下,而S3C2440A可以正常工作在400MHz下,可想而知两者速度相差会有多大了。如果CPU工作在12MHz频率下,开发板的使用效率非常低,所有依赖系统时钟工作的硬件,其工作效率也很低,比如,我们电脑里面经常提到的超频,超频就是让CPU工作在更高的频率下,让电脑运算速度更快,虽然频率是越高越好,但是由于硬件特性决定了任何一个设备都不可能无止境的超频,电脑超频时要考虑到CPU或主板发热过大,烧坏的危险,同样开发板的主板
发表于 2020-05-14
一起学mini2440裸机开发(三)--S3C2440时钟学习
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved