移植Linux2.6.39到杨创utu2440

2024-02-03 19:38

本文主要是介绍移植Linux2.6.39到杨创utu2440,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/panzhenjie/article/details/6443311


移植是基于比较新的官方的2.6.39的内核,下载下来linux-2.6.39.tar.bz2,然后解压。

view plain
  1. tar jxvf linux-2.6.39.tar.bz2  

进入内核目录,把最接近utu2440的默认配置文件拷贝出来。

view plain
  1. cd linux-2.6.39cp arch/arm/configs/s3c2410_defconfig .config  

然后进行配置

view plain
  1. make menuconfig  

暂时没有什么需要修改的,直接就用默认的编译。

view plain
  1. make uImage  

漫长的等待之后,会在arch/arm/boot下产生一个uImage文件,这就是编译出来的给uboot使用的内核了。

view plain
  1. OBJCOPY arch/arm/boot/ImageKernel: arch/arm/boot/Image is readyAS      arch/arm/boot/compressed/head.oGZIP    arch/arm/boot/compressed/piggy.gzipCC      arch/arm/boot/compressed/misc.oCC      arch/arm/boot/compressed/decompress.oSHIPPED arch/arm/boot/compressed/lib1funcs.SAS      arch/arm/boot/compressed/piggy.gzip.oAS      arch/arm/boot/compressed/lib1funcs.oLD      arch/arm/boot/compressed/vmlinuxOBJCOPY arch/arm/boot/zImageKernel: arch/arm/boot/zImage is readyUIMAGE  arch/arm/boot/uImage  

把uImage拷贝到tftp的文件夹下,启动板子,首先要配置uboot从tftp下载kernel

view plain
  1. bootdelay=1baudrate=115200ethaddr=00:0c:20:02:0a:5bnetmask=255.255.255.0bootcmd=tftp 0x32000000 uImage; bootm 0x32000000ipaddr=192.168.1.200bootargs=console=ttySAC0,115200 root=/dev/nfs rw nfsroot=192.168.1.100:/home/zhenjie/development/nfsroot ip=192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0 init=/linuxrcserverip=192.168.1.100stdin=serialstdout=serialstderr=serial  

配置完成后重启,板子下载kernel运行,出现如下信息。

view plain
  1. ## Booting image at 32000000 ...   Image Name:   Linux-2.6.39   Created:      2011-05-24  13:05:07 UTC   Image Type:   ARM Linux Kernel Image (uncompressed)   Data Size:    2109548 Bytes =  2 MB   Load Address: 30108000   Entry Point:  30108000   Verifying Checksum ... OKOKStarting kernel ...Uncompressing Linux... done, booting the kernel.Error: unrecognized/unsupported machine ID (r1 = 0x0000147c).Available machine support:ID (hex)        NAME000000c1        SMDK24100000015b        IPAQ-H19400000039f        Acer-N3500000290        Acer-N300000014b        Simtec-BAST000002a8        Nex Vision - Otom 1.100000400        AML_M5900000005b4        TCT_HAMMER000001db        Thorcom-VR100000000454        QT2410000005d2        JIVE000003fe        SMDK2413000003f1        SMDK241200000377        S3C241300000474        VSTMS00000695        SMDK2416000002de        Simtec-Anubis0000034a        Simtec-OSIRIS00000250        IPAQ-RX37150000016a        SMDK2440000002a9        NexVision - Nexcoder 244000000707        AT2440EVB000007cf        MINI244000000518        GTA02000003b8        HP iPAQ RX19500000043c        SMDK2443Please check your kernel config and/or bootloader.  

这个主要是因为uboot传过来的id无法和列表里的匹配。

因为utu2440烧写uboot速度极为缓慢,不方便调试,所以就采取uboot不变,尽可能修改内核的策略。

在arch/arm/tools下有个文件mach-types,修改里面的一行id配置,0x0000147c=5244

view plain
  1. s3c2440         ARCH_S3C2440        S3C2440         362改成s3c2440            ARCH_S3C2440        S3C2440         5244  

然后重新make并下载至板子,这次内核成功启动,但是输出一堆的乱码。

这个应该是串口的波特率设置不对,正好见到网上有篇文章,得知是因为uboot和kernel设置的时钟频率不一样。

于是修改之,arch/arm/mach-s3c2440/mach-smdk2440.c

view plain
  1. static void __init smdk2440_map_io(void){s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));s3c24xx_init_clocks(16934400);s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));}s3c24xx_init_clocks(16934400);改成s3c24xx_init_clocks(12000000);  

重新make并下载,串口终于可以正常输出了。

但是出现了kernel panic然后停住了,看了看串口信息,nfs没有成功加载

view plain
  1. VFS: Unable to mount root fs via NFS, trying floppy.VFS: Cannot open root device "nfs" or unknown-block(2,0)  

既然kernel已经有了nfs的支持,那会不会是以太网驱动有问题那?于是转去看以太网模块。

发现在arch/arm/mach-s3c2440/mach-smdk2440.c里完全没有dm9000的踪迹,看来标准的smdk2440是没有包含dm9000。

于是找了下其他文件,发现mach-mini2440.c里有dm9000的配置代码,于是华丽得Ctrl+C, Ctrl+V。

再根据schematic修改dm9000的片选和中断GPIO。

view plain
  1. #include <linux/dm9000.h>/* DM9000AEP 10/100 ethernet controller */#define MACH_SMDK2440_DM9K_BASE (S3C2410_CS3 + 0x300)static struct resource smdk2440_dm9k_resource[] = {[0] = {.start = MACH_SMDK2440_DM9K_BASE,.end   = MACH_SMDK2440_DM9K_BASE + 3,.flags = IORESOURCE_MEM},[1] = {.start = MACH_SMDK2440_DM9K_BASE + 4,.end   = MACH_SMDK2440_DM9K_BASE + 7,.flags = IORESOURCE_MEM},[2] = {.start = IRQ_EINT9,.end   = IRQ_EINT9,.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,}};/* * The DM9000 has no eeprom, and it's MAC address is set by * the bootloader before starting the kernel. */static struct dm9000_plat_data smdk2440_dm9k_pdata = {.flags        = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),};static struct platform_device smdk2440_device_eth = {.name        = "dm9000",.id      = -1,.num_resources = ARRAY_SIZE(smdk2440_dm9k_resource),.resource  = smdk2440_dm9k_resource,.dev       = {.platform_data   = &smdk2440_dm9k_pdata,},};static struct platform_device *smdk2440_devices[] __initdata = {&s3c_device_ohci,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c0,&s3c_device_iis,&smdk2440_device_eth,};  

这下,网络也起来了,出现了如下信息

view plain
  1. VFS: Mounted root (nfs filesystem) on device 0:12.Freeing init memory: 152KFailed to execute /linuxrc.  Attempting defaults...Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.  

这证明nfs已经连上了,下面要做的是做个最简单的rootfs了。

make buildroot时提示没有makeinfo,安装texinfo即可。

于是把buildroot做好的tar包解压到nfs的文件夹。

view plain
  1. sudo tar xvf output/images/rootfs.tar -C ~/development/nfsroot/  

重启看到输出信息有所变化了

view plain
  1. VFS: Mounted root (nfs filesystem) on device 0:12.Freeing init memory: 152KKernel panic - not syncing: Attempted to kill init!Backtrace:[<c003b390>] (dump_backtrace+0x0/0x110) from [<c030e240>] (dump_stack+0x18/0x1c) r6:c0407140 r5:c0407140 r4:c0423178[<c030e228>] (dump_stack+0x0/0x1c) from [<c030e2a0>] (panic+0x5c/0x180)[<c030e244>] (panic+0x0/0x180) from [<c0050f0c>] (do_exit+0xb0/0x614) r3:60000013 r2:c3819e4c r1:00000001 r0:c039e05d r7:c3819fb0[<c0050e5c>] (do_exit+0x0/0x614) from [<c005175c>] (do_group_exit+0x90/0xc0) r7:c3819fb0[<c00516cc>] (do_group_exit+0x0/0xc0) from [<c005b794>] (get_signal_to_deliver+0x304/0x33c) r4:0830009f[<c005b490>] (get_signal_to_deliver+0x0/0x33c) from [<c003a620>] (do_signal+0x84/0x55c)[<c003a59c>] (do_signal+0x0/0x55c) from [<c003afc8>] (do_notify_resume+0x1c/0x50)[<c003afac>] (do_notify_resume+0x0/0x50) from [<c0038874>] (work_pending+0x24/0x28) r4:00000008  

在网上查了下,原来是因为buildroot的用EABI编译的,而kernel的CONFIG_AEABI选项没有打开,所以不兼容。

那就把kernel的CONFIG_AEABI打开重新编译运行,成功进入shell,一切搞定!

这篇关于移植Linux2.6.39到杨创utu2440的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675173

相关文章

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

arm linux lua移植

lua: lua home 1.下载lua源码 lua下载 lua-5.3.4.tar.gz 2.解压: tar xvf lua-5.3.4.tar.gz 3.修改makefile and luaconf.h $修改 lua-5.3.4/Makefile #INSTALL_TOP= /usr/local INSTALL_TOP= $(shell pwd)/out #修改安装目录(当前目录/o

数据库系统 第39节 数据库性能监控工具

数据库性能监控工具是数据库管理系统(DBMS)中非常重要的一部分,它们帮助数据库管理员(DBA)和开发人员了解数据库的运行状况,识别性能瓶颈,并进行相应的优化。以下是一些常见的数据库性能监控工具及其功能: SQL Profiler: 用途:SQL Profiler 是一个用于跟踪数据库系统中 SQL 语句执行的工具。它可以捕获和显示关于 SQL Server 操作的详细执行信息。功能:它可以记

【全网最全】2024年数学建模国赛D题39页成品论文+matlab代码+结果等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛D题39页成品论文+matlab代码+结果等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」👋更新39页成品论文+mat

s3c2440---PWM使用之蜂鸣器驱动移植

一、蜂鸣器驱动介绍 1.1.什么是蜂鸣器               蜂鸣器是一种简单的声响发生器,常用于电子产品中作为警示或提醒作用。其基本原理是通过交替改变直流电的电压方向来产生声音,一般使用交替电流产生声音会比较稳定。 1.2.蜂鸣器的类别 1.有源蜂鸣器 1)结构原理 有源蜂鸣器内部自带振荡源,只需接通电源即可发声。内部电路会自动产生一定频率的振荡信号,从而驱动蜂鸣器发声。

代码随想录刷题day23丨39. 组合总和,40.组合总和II, 131.分割回文串

代码随想录刷题day23丨39. 组合总和,40.组合总和II, 131.分割回文串 1.题目 1.1组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0039.%E7%

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算