[嵌入式] 重温Mini2440(二)移植Linux-4.9.270

news/2024/10/23 9:37:06/

重温Mini2440(二)移植Linux-4.9.270

  • 一. 获取Linux内核
  • 二. 安装编译工具
  • 三. 配置内核
  • 四. 修改驱动
  • 五. 生成uImage
  • 六. U-Boot引导内核

一. 获取Linux内核

在The Linux Kernel Archives可以下载到最新的Linux内核
此文使用的版本是: longterm: 4.9.270

下载得到linux-4.9.270.tar.xz压缩包,通过tar命令解压得到内核源码:

tar -xvJf linux-4.9.270.tar.xz

二. 安装编译工具

#安装交叉编译工具
sudo apt install gcc-arm-linux-gnueabihf#make编译内核过程中所需的工具
sudo apt install libncurses5-dev
sudo apt install libx11-dev:i386 libreadline6-dev:i386
sudo apt install build-essential
sudo apt install lib32stdc++6
sudo apt install lib32z1#根据编译过程中的报错提示安装对应的工具
sudo apt install bc
sudo apt install bison
sudo apt install flex
sudo apt install libssl-dev

三. 配置内核

1.进入源码目录,打开Makefile

vim Makefile 

2.定位到ARCH和CROSS_COMPILE,配置架构和交叉编译器

 257 ARCH            ?= arm258 CROSS_COMPILE   ?= arm-linux-gnueabihf-

3.使用自带的mini2440_defconfig配置

make mini2440_defconfig

4.根据需求裁剪内核

make menuconfig

4.1 取消Flash Translation Layer support

在这里插入图片描述

4.2 打开Early printk(按需配置)
如果打开了此配置,u-boot的bootargs参数需要增加earlyprintk字段

在这里插入图片描述

四. 修改驱动

1.修改Nand Flash分区

在这里插入图片描述

246 /* NAND Flash on MINI2440 board */
247 
248 static struct mtd_partition mini2440_default_nand_part[] __initdata = {
249         [0] = {
250                 .name   = "u-boot",
251                 .size   = 0x00060000,
252                 .offset = 0,
253         },
254         [1] = {
255                 .name   = "u-boot-env",
256                 .size   = 0x00020000,
257                 .offset = 0x00060000,
258         },
259         [2] = {
260                 .name   = "kernel",
261                 /* 5 megabytes, for a kernel with no modules
262                  * or a uImage with a ramdisk attached */
263                 .size   = 0x00500000,
264                 .offset = 0x00080000,
265         },
266         [3] = {
267                 .name   = "root",
268                 .offset = 0x00580000,
269                 .size   = 200*1024*1024,//MTDPART_SIZ_FULL,
270         },
271 };

2.修改dm9000网卡驱动

在这里插入图片描述

  47 #include "dm9000.h"48 //for mini244049 #include <../../../../arch/arm/mach-s3c24xx/regs-mem.h>50 //end910 static void911 dm9000_init_dm9000(struct net_device *dev)912 {913         //for mini2440914         unsigned int oldval_bwscon = *(volatile unsigned int*)S3C2410_BWSCON;915         unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;916         *((volatile unsigned int*)S3C2410_BWSCON) = (oldval_bwscon &~(3<<16)) | (1<<16) | (1<<18) | (1<<19);917         *((volatile unsigned int*)S3C2410_BANKCON4) = 0x1f7c;918         //end919 920         struct board_info *db = netdev_priv(dev);921         unsigned int imr;922         unsigned int ncr;

五. 生成uImage

1.编译内核

#根据CPU核心数执行多任务编译
make -j4

成功编译后会生成zImage:

在这里插入图片描述

2.安装uImage生成工具

sudo apt install u-boot-tools

3.编写mkuImage.sh脚本,注意zImage的位置以及生成uImage的位置

echo "mkimage -A arm -O linux -Tkernel -C none -a 0x30008000 -e 0x30008040 -n mini2440 -d /home/lps/linux-4.9.270/arch/arm/boot/zImage /home/lps/rootfs/uImage" > ./mkuImage.sh

4.赋予可执行权限

chmod a+x mkuImage.sh

5.运行脚本

./mkuImage.sh

在这里插入图片描述

六. U-Boot引导内核

我使用nfs的方式加载并引导内核,具体方法请参考重温Mini2440(一)移植U-Boot
一切顺利后会在终端看到如下打印:

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]# setenv bootcmd 'nfs 0x30008000 192.168.15.230:/home/lps/rootfs/uImage;bootm'
[u-boot@MINI2440]# save
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 --   0% complete.
Writing to Nand... done
[u-boot@MINI2440]# boot
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
File transfer via NFS from server 192.168.15.230; our IP address is 192.168.15.233
Filename '/home/lps/rootfs/uImage'.
Load address: 0x30008000
Loading: ####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
done
Bytes transferred = 3049768 (2e8928 hex)
## Booting kernel from Legacy Image at 30008000 ...Image Name:   mini2440Created:      2021-06-02   2:01:26 UTCImage Type:   ARM Linux Kernel Image (uncompressed)Data Size:    3049704 Bytes =  2.9 MBLoad Address: 30008000Entry Point:  30008040Verifying Checksum ... OKXIP Kernel Image ... OK
OK
Using machid 0x7cf from environmentStarting kernel ...Booting Linux on physical CPU 0x0
Linux version 4.9.270 (lps@lps-ubuntu) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) ) #2 Wed Jun 2 09:46:07 CST 2021
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c000717f
CPU: VIVT data cache, VIVT instruction cache
Machine: MINI2440
Memory policy: Data cache writeback
CPU S3C2440A (id 0x32440001)【此处省略一万字】VFS: Mounted root (nfs filesystem) on device 0:12.
Freeing unused kernel memory: 184K
This architecture does not have kernel memory protection.
Kernel panic - not syncing: Requested init /linuxrc failed (error -2).
CPU: 0 PID: 1 Comm: swapper Not tainted 4.9.270 #2
Hardware name: MINI2440
[<c000f1cc>] (unwind_backtrace) from [<c000ce28>] (show_stack+0x10/0x18)
[<c000ce28>] (show_stack) from [<c045acb8>] (dump_stack+0x18/0x24)
[<c045acb8>] (dump_stack) from [<c045934c>] (panic+0xac/0x244)
[<c045934c>] (panic) from [<c045c2d4>] (kernel_init+0x70/0xe8)
[<c045c2d4>] (kernel_init) from [<c000a4e8>] (ret_from_fork+0x14/0x2c)
---[ end Kernel panic - not syncing: Requested init /linuxrc failed (error -2).

由于还没有移植根文件系统,因此VFS无法挂载并且报错


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

相关文章

让mini2440成为U盘之linux gadget driver

如何使mini2440开发板插上电脑能被电脑识别为U盘,并能往里面拷贝东西呢? 这里就要学习USB gadget driver,USB gadget driver主要涉及s3c2440_udc.ko和g_file_storage.ko两个模块。 进入linux2.6.32.2内核编译步骤如下: 1)在device drivers中选择USB support 2)进入US…

linux集显驱动程序,Ubuntu14.04安装intel集显驱动

Made with Remarkable! Ubuntu14.04安装intel集显驱动 标签(空格分隔)&#xff1a; ubuntu linux 驱动安装 1.查看本机显卡型号 使用lspci命令来获取PCI接口硬件信息 oo-pc:~$ lspci | grep -i vga 00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Process…

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

重温Mini2440&#xff08;一&#xff09;U-Boot 一. 前言二. 下载U-Boot1. 编译2. 烧录 三. 使用U-Boot1. 设置网络地址2. ping命令3. tftp命令4. nfs命令5. nand flash启动 四. 屏蔽蜂鸣器 一. 前言 Mini2440所搭载的s3c2440早已停产&#xff0c;但是平台会过时技术不会过时&…

ubuntu16 dnw for tiny4412

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

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

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

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.主控端原理图:…