随笔分类 - s3c2440
摘要:在Mini2440之linux内核移植文章中我们介绍了linux内核移植。并将最终修改后的内核代码保存到/work/sambashare/linux-5.2.8路径下。后续所有驱动也都将在这里修改。 root@zhengyang:/work/sambashare# ll drwxrwxr-x 25
阅读全文
摘要:在进行linux驱动开发之前,我们先来思考一下什么是linux驱动?我们在前面的文章中介绍过Mini2440裸机程序的开发,比如如何点亮LED、如何通过LCD显示图片。 但是如果我们开发板移植了linux内核之后,我还想点亮LED,那该怎么办呢? 由于我们编写的应用程序是无法和硬件直接打交道的,为此
阅读全文
摘要:什么是根文件系统?理论上说一个嵌入式设备如果内核能运行起来,且不需要用户进程的话(估计这种情况很少),是不需要文件系统的。文件系统简单的说就是一种目录结构,由于linux操作系统的设备在系统中是以文件的形式存在,将这些文件分类管理以及提供和内核交互的接口,就形成了一定的目录结构也就是文件系统。文件系
阅读全文
摘要:在上一节我们已经介绍了u-boot启动linux内核的流程。这一节我们将对u-boot进行改造,使其支持linux-5.2.8版本内核启动。 linux kernel支持多种硬件,所谓内核移植概括的说,就是修改kernel中硬件相关的源码以适应自己的硬件。linux中硬件相关的代码主要集中在arch
阅读全文
摘要:在前面的章节关于u-boot的源码,以及u-boot的移植这一块我们介绍完了。接下来,我们应该开始进入第二个阶段,linux内核移植,以及驱动开发。 但是在这之前,我们遗漏了u-boot中的一个重要环节没有介绍,就是u-boot如何执行bootm命令,如何实现linux内核启动。 我们在《Mini4
阅读全文
摘要:本节的代码都是在Mini440之uboot移植之实践NAND启动(四) 代码基础上修改的。 一、修改默认环境变量 不知道你有没有留意到,uboot在启动时,串口输出信息有下面一行: U-Boot 2016.05 (Jan 14 2022 - 22:22:01 +0800) CPUID: 324400
阅读全文
摘要:在之前的章节我们已经介绍了u-boot如何支持我们的NOR FLASH,以及DM9000网卡的支持。 这一节我们将会在Young / s3c2440_project[u-boot-2016.05-nor-flash】代码的基础上新建u-boot-2016.05-nand-flash项目,使得我们项目
阅读全文
摘要:网络对于嵌入式系统来说必不可少。可是S3C2440没有集成以太网接口,所以要想使S3C2440具备以太网的功能,就必须扩展网卡接口。我们使用的Mini2440就是外接DM9000EP,使其可以与以太网相连接。DM9000和DM9000EP主要是封装不一样,其他基本都是一样的。 一、DM9000介绍
阅读全文
摘要:继续上一节内容,不知道你有没有注意到,启动u-boot后,运行有一行信息: 输出Flash信息这一部分代码是位于board_init_r阶段,执行initr_net()函数的输出结果。 我们开发板上搭载了型号为DM9000网卡芯片,这一节我们将会介绍u-boot如何支持我们的DM9000网卡,这样我
阅读全文
摘要:在上一节中,不知道你有没有注意到,以NOR方式启动u-boot后,运行有一行信息: 输出Flash信息这一部分代码是位于board_init_r阶段,执行initr_flash()函数的输出结果。 我们开发板上搭载了型号为S29AL016D70TF102的2MB大小的NOR FLASH,这里输出NO
阅读全文
摘要:一、u-boot移植概述 1.1 移植不同的硬件层次 我们要向不同的硬件平台上移植u-boot,我们必须明确不同硬件平台之间的差别。而硬件的差别体现在多个层面上。比如说我们使用的Mini2440开发板,采用的SOC芯片是三星公司的S3C2440,该SOC使用的内核(CPU)是ARM公司设计的ARM9
阅读全文
摘要:看到这里的同学,恭喜你,马上就看完了u-boot的源码了。 一、run_main_loop 我们介绍到了init_sequence_r的最后一个函数run_main_loop,该函数位于common/board_r.c文件中。 static int run_main_loop(void) { #if
阅读全文
摘要:board_init_r和board_init_f差不多,都是执行一个循环。这里是循环执行init_sequence_r[]里的函数指针。 一、board_init_r(common/board_r.c) void board_init_r(gd_t *new_gd, ulong dest_addr
阅读全文
摘要:所谓的relocation,就是重定位,u-boot运行后会将自身代码拷贝到SDRAM的另一个位置继续运行。 但基于以前的理解,一个完整可运行的bin文件,link时指定的链接地址,load时的加载地址,运行时的运行地址,这3个地址应该是一致的。 relocation后运行地址不同于加载地址,特别是
阅读全文
摘要:一、board_init_f(common/board_f.c) 该函数位于common/board_f.c文件: void board_init_f(ulong boot_flags) { #ifdef CONFIG_SYS_GENERIC_GLOBAL_DATA /* * For some ar
阅读全文
摘要:在前面的文章我们已经介绍了如何自己去实现一个BootLoader,今天我们来介绍u-boot的移植,u-boot是一种通用的BootLoader。 在嵌入式Linux之uboot源码make配置编译正向分析中我们已经介绍了如何通过Source Insight打开u-boot源码,以及uboot的编译
阅读全文
摘要:一、BootLoader 1.1 什么是BootLoader 在系统上电后,需要一段程序来初始化: 初始化异常向量表,进入SVC模式,关中断; 关闭MMU和cache; 关闭开门狗; 初始换系统时钟; 初始化内存; 重定位,BootLoader可能大于4K,将代码从Nand Flash复制到内存中;
阅读全文
摘要:一、S3C2440上的RTC 1.1 概述 RTC,英文全称Real Time Clock,中文就是实时时钟,是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电。 RTC可以通过使用STRB/LDRB ARM操
阅读全文
摘要:一、linux中的内存管理 1.1 虚拟内存的引出 我们都知道linux是一个多进程的操作系统,既然是多进程操作系统,那就会存在一个问题。 假设我们有两个进程A和B、并且A和B都是直接访问的物理地址,如果程序A使用了物理地址0x40000,B程序并不知道程序A使用了物理地址0x40000,B程序修改
阅读全文
摘要:在通信协议-I2C小节,我们已经对I2C协议以及AT24C08芯片进行了详细的介绍,这里就不在重复赘述。 一、S3C2440上的I2C 1.1 I2C概述 I2C的使用位于S3C2440芯片手册的第20章。S3C2440可以支持一个多主控I2C总线串行接口。一条专用串行数据线(SDA)和一条专用串行
阅读全文