[嵌入式] 重温Mini2440(一)移植U-Boot

news/2024/10/23 9:24:12/

重温Mini2440(一)U-Boot

  • 一. 前言
  • 二. 下载U-Boot
    • 1. 编译
    • 2. 烧录
  • 三. 使用U-Boot
    • 1. 设置网络地址
    • 2. ping命令
    • 3. tftp命令
    • 4. nfs命令
    • 5. nand flash启动
  • 四. 屏蔽蜂鸣器

一. 前言

Mini2440所搭载的s3c2440早已停产,但是平台会过时技术不会过时,还是具有一定的学习意义,最后发挥一次这块开发板的余热吧。
U-Boot涉及的技术是裸机开发,实际工作中U-Boot主要是作为工具使用,利用tftp和nfs来下载内核和挂载根文件系统,此篇只记录U-Boot的常用方法,移植后面再研究。

二. 下载U-Boot

1. 编译

此文使用Tekkaman开源的u-boot for mini2440,可到此处下载。
解压后手动编译,需要事先安装交叉编译工具。

make ARCH=arm CROSS_COMPILE=arm-linux- mini2440_config
make ARCH=arm CROSS_COMPILE=arm-linux- all

编译完成后在当前目录生成u-boot.bin

在这里插入图片描述

2. 烧录

使用J-Link烧写bin文件到Mini2440的NOR flash
将u-boot.bin写进开发板后,上电后开发板蜂鸣器会响1秒,同时在终端打印数据,在1秒内按下任意按键可以进入命令模式。

U-Boot 2010.03 (507 2021 - 14:09:38)modified by tekkamanninja (tekkamanninja@163.com)Love Linux forever!!I2C:   ready
DRAM:  64 MB
Flash:  2 MB
NAND:  256 MiB
Video: 240x320x16 20kHz 62Hz
In:    serial
Out:   serial
Err:   serial
USB slave is enable!
Net:   dm9000
U-Boot 2010.03 (507 2021 - 14:09:38)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux forever!!
Hit any key to stop autoboot:  0
[u-boot@MINI2440]#
[u-boot@MINI2440]#

三. 使用U-Boot

1. 设置网络地址

根据实际情况设置IP地址

[u-boot@MINI2440]# setenv ipaddr 192.168.15.233
[u-boot@MINI2440]# setenv gatewayip 192.168.15.1
[u-boot@MINI2440]# setenv serverip 192.168.15.230
[u-boot@MINI2440]# setenv netmask 255.255.255.0
[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 --   0% complete.
Writing to Nand... done
[u-boot@MINI2440]# printenv

2. ping命令

尝试ping通服务器(ip地址就是上面设置的serverip)

[u-boot@MINI2440]# ping 192.168.15.230
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
host 192.168.15.230 is alive

注意:只能u-boot去ping别的机器,别的机器无法ping通u-boot,因为u-boot未作处理

3. tftp命令

要验证u-boot的tftp功能,服务器Linux需要安装tftp服务

1. 安装服务:
sudo apt install tftpd-hpa2. 创建tftp服务目录:
mkdir /home/lps/tftp
chmod 777 /home/lps/tftpvim /etc/default/tftpd-hpa
3. 内容修改为:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/lps/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"4. 重新启动TFTP服务
sudo service tftpd-hpa restart

然后就可以在u-boot里使用tftp命令下载文件到开发板的内存上,最后写进nand flash

[u-boot@MINI2440]# 
tftp 0x30008000 u-boot.bin
nand erase 0 0x60000
nand write 0x30008000 0 0x60000tftp 0x30008000 uImage
nand erase 0x80000 0x500000
nand write 0x30008000 0x80000 0x500000tftp 0x30008000 rootfs.img
nand erase 0x580000 $filesize
nand write.yaffs 0x30008000 0x580000 $filesize

也可以使用tftp方式来加载内核并启动,需要设置u-boot:

[u-boot@MINI2440]# 
setenv bootcmd 'tftp 0x30008000 uImage;bootm 0x30008000'
saveenv

4. nfs命令

首先服务器也需要安装nfs服务,可参考此文。

然后u-boot就可以利用nfs命令下载文件,同tftp类似
指令格式为nfs [loadAddress] [[hostIPaddr:]bootfilename]

在这里插入图片描述
如果可以下载成功,说明nfs功能已经没有问题,此时设置u-boot启动参数就可以实现nfs加载内核以及挂载根文件系统,IP地址需要区分好客户端ip和服务端ip:

[u-boot@MINI2440]# 
setenv bootcmd 'nfs 0x30008000 192.168.15.230:/home/lps/rootfs/uImage;bootm'
setenv bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.15.230:/home/lps/rootfs,nolock ip=192.168.15.233:192.168.15.230:192.168.15.1:255.255.255.0:mini2440:eth0:off console=ttySAC0,115200 init=/linuxrc
saveenv

5. nand flash启动

如果不想利用网络方式启动内核和挂载根文件系统,则需要u-boot设置启动参数:

[u-boot@MINI2440]# 
setenv bootcmd 'nand read 0x30008000 0x80000 0x500000;bootm 0x30008000'
setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

需要确保nand flash已经成功烧写上内核和根文件系统镜像,如果有出现坏块或者文件系统无法挂载,可以尝试格式化nand flash后再重新烧写

[u-boot@MINI2440]# nand scrub

四. 屏蔽蜂鸣器

此版本u-boot在每次上电蜂鸣器都会响一小会,开发板的蜂鸣器控制引脚是GPB0,如果要让u-boot安静启动,只需要更改GPBDAT寄存器相关代码即可

  • board/tekkamanninja/mini2440/mini2440.c
168 #if     defined(CONFIG_MINI2440_LED)
169         gpio->GPBDAT = 0x00000180; //禁止蜂鸣器 0x00000181->0x00000180
170 #endif
  • lib_arm/board.c
145 #if defined(CONFIG_MINI2440_LED)        
146         struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();
147         writel(0x100, &gpio->GPBDAT);  //禁止蜂鸣器 0x101->0x100
148 #endif

http://www.ppmy.cn/news/165058.html

相关文章

ubuntu16 dnw for tiny4412

工具下载链接:http://download.csdn.net/download/qq_33160790/9954335 如果是ubuntu12工具应该能make然后直接使用,在ubuntu16编译会报错(需要修改驱动的makefile): make -C /lib/modules/uname -r/build Mpwd/src/…

一个计算机爱好者的不完整回忆(十七)硬件

2001年,我的新电脑终于装出来了。在真正开始装这台电脑前,至少已经花了半年时间了解硬件消息,各种报纸、杂志看了很多,特别是硬件信息,看得非常细,了解每种硬件的规格、价格。这台电脑具体配置就不写了&…

Spring Boot 整合kafka消费模式AckMode以及手动消费

依赖管理 在pom.xml文件中导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 配置文件修改 需要自己配置AckMode时候的配置 spring:applicati…

nano-pc-t1 4412 显示驱动分析

1. 和其它内核代码类似。 显示驱动的分析都是由 drivers/video/fbmem.c开始&#xff0c;fbmem.c是显示驱动的抽象&#xff0c;实际只是一个框架性的东西。 fbmem_init 中实现了一个字符设备驱动&#xff0c;并创建了class&#xff0c;但是没有生成设备文件。 这个字符设备驱动的…

MINI2440+UDA1341TS分析之一

开发板MINI2440上的音频系统为S3C2440UDA1341TS. 1.硬件原理图: 1-1.设备端原理图: UDA1341TS原理图如下: 可见,UDA1341TS这颗CODEC和S3C2440的硬件接口为L3和IIS.其中,L3为实现UDA1341TS这颗CODEC内部寄存器配置的硬件接口,而IIS则为音频数据流的数据接口. 1-2.主控端原理图:…

【Linux驱动】TQ2440 LED驱动程序

★总体介绍 LED驱动程序主要实现了TQ2440开发板上的4个LED灯的硬件驱动&#xff0c;实现了对引脚GPIOB5、GPIOB6、GPIOB7、GPIOB8的高低电平设置&#xff08;common-smdk.c中已经实现了对引脚的配置&#xff09;&#xff0c;利用测试程序调用该驱动程序&#xff0c;通过命令控…

u-boot 2010.09 支持mini2440

手头上只有mini2440的板子&#xff0c;移植也是针对它&#xff0c;感觉老了点&#xff0c;^.^!,本来uboot的版本想选定最新的&#xff0c;如2011.03等&#xff0c;但是uboot从2010年12月份的版本起&#xff0c;前面的初始化代码结构改动比较多&#xff0c;而且存在很多bug&…

使用soundcard在Python中操作声卡

简 介&#xff1a; 利用Python中的soundcard软件包可以对声卡的MIC&#xff0c;SPEAKER进行操作。基于此&#xff0c;配合可编程信号源DG1062可以获得声卡的详细的幅频特性。 关键词&#xff1a; 声卡&#xff0c;soundcard&#xff0c;dg1062&#xff0c;幅频特性 #mermaid-sv…