- 博客(144)
- 收藏
- 关注
原创 u-boot-2012.04.01移植(十)设置默认环境变量及实现环境变量的保存
启动时有如下提示信息,告知使用默认环境变量,我们可以在程序中自己设置默认环境变量*** Warning - bad CRC, using default environment搜索using default environment定位到common/env_common.c:175:grep “using default environment” * -nR函数开头出现环境变量...
2020-04-02 16:21:06
344
原创 u-boot-2012.04.01移植(九)提供dm9000网卡支持
从u-boot打印信息可以看到,使用网卡是cs8900,但开发板上集成的是dm000,需要修改代码以支持dm9000(使用内核自带dm9000驱动)1、修改配置更换网卡cs8900的源文件放在drivers/net中找到宏CONFIG_CS8900cat drivers/net/Makefile | grep cs8900为了使用网卡cs8900,需要定义宏CONFIG_...
2020-04-02 14:02:14
159
原创 u-boot-2012.04.01移植(八)提供nand flash支持
上一节修改代码后,提供了nor flash支持,但从nand flash启动,发现仍然会出现错误,故目前还不支持nand flash继续分析arch/arm/lib/board.c,可知当系统从nand flash启动,nor flash不可见,flash_size<=0时,程序进入死循环hang();修改代码:取消死循环// puts(failed);// h...
2020-04-02 13:46:28
133
原创 u-boot-2012.04.01移植(七)提供nor flash支持
无论系统从NOR启动还是从NAND启动,都会打印相同的错误信息Flash:*** failed ***### ERROR ### Please RESET the board正常的打印信息应该是Flash: 2M2M表示Flash大小显然这里Flash识别出错通过下面命令定位错误在arch/arm/lib/board.c:506:grep "Flash...
2020-04-02 13:38:23
407
原创 u-boot-2012.04.01移植(六)提供nand flash启动支持
重新编译烧写,串口输出错误信息:Flash:*** failed ***### ERROR ### Please RESET the board这个错误下一节再解决,这一节先为u-boot提供nand flash启动的支持前面分析uboot时提到链接时加上-pie选项会生成位置无关码,将变量、函数的地址保存起来,以便于在uboot重定位代码时使用,这样虽然可以不指定程序的链接...
2020-04-02 13:22:47
390
原创 u-boot-2012.04.01移植(五)修改串口初始化代码
重新编译烧写u-boot试验,发现串口输出乱码,可能是串口波特率设置不正确分析代码发现,串口初始化在初始化序列的中serial_init,这个函数调用drivers/serial/serial_s3c24x0.c中的serial_init_dev,最后在_serial_setbrg中设置波特率 reg = get_PCLK() / (16 * gd->baudrate) - ...
2020-04-02 13:04:50
260
原创 u-boot-2012.04.01移植(四)修改CPU时钟及分频系数
编译烧写u-boot发现,串口没有输出信息分析start.S1、设置分频系数1:2:42、然后在cpu_init_crit中调用lowlevel_init,按照60MHz 的HCLK来设置内存控制器3、随后设置栈,调用C函数board_init_f,在board_early_init_f中设置时钟这样的先后顺序是有问题的,因为设置内存控制器时CPU时钟是12MHz,HCL...
2020-04-02 13:00:22
488
原创 u-boot-2012.04.01移植(三)新建单板信息
所用开发板是JZ2440,与smdk2410相似,只需要拷贝smdk2410,并且稍加修改即可在u-boot顶层目录输入以下命令cp board/samsung/smdk2410 board/samsung/smdk2440 -rfcp include/configs/smdk2410.h include/configs/smdk2440.hvi boards.cfg添加一行...
2020-04-02 12:52:26
128
原创 u-boot-2012.04.01移植(二)安装合适的交叉编译工具链
3.4.5版本的工具链不足以支持编译u-boot-2012.04.01(编译时会出现段错误),安装4.3.2版本的工具链:mkdir tmpsudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /$PATH 我输入命令后显示/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/u...
2020-04-02 12:44:33
261
原创 u-boot-2012.04.01移植(一)简单分析第一阶段
与u-boot-1.1.6类似,分析可以得到链接命令的一部分如下:arm-linux-ld -pie -T u-boot.lds -Bstatic -Ttext 0x0 $UNDEF_SYM arch/arm/cpu/arm920t/start.o从链接命令可以知道:1、链接脚本:u-boot.lds2、第一个链接的文件:arch/arm/cpu/arm920t/start.S...
2020-04-02 12:42:22
243
原创 清除nand flash虚假坏块
擦除和烧写nand flash时发现坏块数目异常,几乎都是连着坏的,并且使用nand dump命令查看flash内容,非常有规律,查阅发现可能是nand flash很多块区域被标记为坏块了解决办法:在u-boot菜单模式下输入以下命令,擦除全片即可nand scrub.chip使用erase擦除nand flash时串口输出的一部分如下(使用烧写命令也有类似提示):...
2020-03-31 19:45:18
3114
原创 linux内核启动停止在booting the kernel.
linux内核启动停止在Uncompressing Linux................................................................ done, booting the kernel.一般错在检查命令行参数uboot菜单模式下输入print检查命令行参数...
2020-03-29 23:16:14
4927
原创 挂接根文件系统时出现错误 jffs2_scan_eraseblock():
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x003b8e30: 0x0100 insteadjffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at...
2020-03-29 23:14:43
691
原创 根文件系统(三)NFS服务
NFS在开发过程中两种应用,一、启动开发板后挂载文件夹开发板从板上文件系统启动,与服务器仅共享某个文件夹,便于文件交换二、从NFS启动开发板开发板的根文件系统位于服务器上,可以在服务器上编译,在开发板上运行,方便使用NFS服务的前期工作:确保开发板能够ping通服务器1、设置服务器网卡为桥接模式2、设置服务器网段与开发板ip,使它们处于同一网段开发板uboot...
2020-03-29 15:11:45
209
原创 根文件系统(二)构建最小根文件系统
本节将构建一个最小根文件系统 /myroot:1、仿照虚拟机上的/dev/console、/dev/null创建设备节点创建目录:mkdir /myroot进入目录:cd /myroot查看设备节点:ls /dev/console /dev/null -l创建设备节点:mkdir devcd devsudo mknod console c 5 1su...
2020-03-28 11:19:24
447
原创 根文件系统(一)最小根文件系统的构成
应用程序位于根文件系统,内核为了使用应用程序,需要挂接根文件系统,本节分析一个最小根文件系统的组成,在下节讲解如果创建一个最小根文件系统内核分析时,有如下调用过程rest_init kernel_init(通过创建线程调用) prepare_namespace mount_root/*挂...
2020-03-27 18:15:19
801
原创 linux-2.6.22.6分析(三)启动流程之第二阶段
内核启动第二阶段的start_kernel函数位于init/main.c1、处理u-boot传入的启动参数(含命令行参数)命令行参数会被提取出来,保存到一个个结构体中,这在文末提及 setup_arch(&command_line); setup_command_line(command_line);2、挂接根文件系统并调用应用程序(逐级缩进表示逐级调用)...
2020-03-27 17:40:04
344
原创 linux-2.6.22.6分析(二)启动流程之第一阶段
内核的启动也可以分为两个阶段第一阶段是用汇编写的,主要是判断是否支持CPU、单板、创建页表等第二阶段是用C语言写的,主要是处理u-boot传递的参数,挂接根文件系统,调用应用程序等本节简要分析启动流程的第一阶段,代码是内核链接的第一个文件arch/arm/kernel/head.S1、判断内核是否支持cpu mrc p15, 0, r9, c0, c0 @ get p...
2020-03-27 16:57:28
397
原创 linux-2.6.22.6分析(一)配置编译链接过程
开发板上电运行的第一段程序是u-boot,为了使用应用程序,u-boot要启动内核,并且由内核挂接根文件系统,下面以linux-2.6.22.6为例,分析内核的启动过程首先从内核的配置过程开始,从根目录的说明文件可以知道配置命令:make menuconfig编译命令:make uImage在配置过程会根据用户配置在根目录生成一个.config文件,里面描述了各种配置项...
2020-03-27 16:37:35
407
原创 u-boot-1.1.6分析(六)run_command
这一节的主要内容一、分析run_command二、自己写一个u-boot命令在u-boot启动等待超时的过程中按下空格键,u-boot会进入菜单模式(用于调试)run_command主要作用是在菜单模式中读取用户输入的字符串,根据字符串从表中提取参数、找到相应命令结构体,并调用命令结构体的功能函数,启动内核也是通过这个函数来进行的分析run-command:1、...
2020-03-27 16:15:15
596
原创 u-boot-1.1.6分析(五)启动流程之第二阶段
分析u-boot第二阶段(u-boot-1.1.6/lib_arm/board.c的start_armboot函数):1、初始化堆空间 gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t)); __asm__ __volatile__("": : :"memory"); memset ((void*)gd, 0, si...
2020-03-27 16:12:52
422
原创 u-boot-1.1.6分析(四)启动流程之第一阶段
从链接脚本可以知道,上电运行第一个文件是u-boot-1.1.6/cpu/arm920t/start.Sstart.S完成的是u-boot启动的第一阶段,主要是完成一些硬件初始化并且转入u-boot第二阶段总的来说有这么九个内容:1、设置为SVC32模式_start: b reset /*跳转到reset*/……reset: mrs r0,cpsr bic...
2020-03-27 15:03:33
239
原创 u-boot-1.1.6分析(三)链接脚本
在链接脚本中:1、指定了链接地址2、规定不同段的位置、不同文件相同段的位置3、按4字节对齐,便于uboot源码处理4、除了通用的段以外,还有一个u_boot_cmd段,专门用于存放uboot命令5、提供__u_boot_cmd_start、__u_boot_cmd_end、__bss_start、_end,用于uboot源码SECTIONS{ . = 0x000...
2020-03-27 14:58:15
158
原创 u-boot-1.1.6分析(二)编译链接过程
分析顶层Makefile:117行包含了配置过程生成的config.mk文件:include $(OBJTREE)/include/config.mk选择对应的交叉编译工具链ifndef CROSS_COMPILE ifeq ($(HOSTARCH),ppc)CROSS_COMPILE =elseifeq ($(ARCH),ppc)CROSS_COMPILE = po...
2020-03-27 08:47:45
289
原创 u-boot-1.1.6分析(一)配置过程
在arm板上电时,为了运行操作linux系统,需要先初始化工作,如初始化各种硬件、设置栈指针、加载操作系统等,完成这些任务的程序就是bootloader,它是上电运行的第一段程序。Bootloader种类众多,在arm上用得较多的有u-boot和vivi不同板子有不同的硬件配置,bootloader一般也不会相同,u-boot为了支持众多的CPU,为每个支持的CPU都编写了特定的文件(位于根目...
2020-03-27 08:33:12
465
原创 数据结构(三)查找算法(2)二分查找
二分查找是一种高效的查找方法,但只适用于顺序表。假定有一个升序数组,二分查找主要思路:先把待找x与数组中间的元素y比较,相等则查找成功,否则将数组对半分为左右两个子表,若x<y,则把x与左子表中间元素比较,若相等则查找成功;若x>y,则把x与左子表中间元素比较,若相等则查找成功;否则按上述方法继续查找,直至查找到元素,或者超出边界二分查找:int binarySea...
2020-03-18 23:09:59
369
原创 数据结构(三)查找算法(1)顺序查找
一片存储空间的中的数据既可能是有序的、也可能是无序的,有序可以是升序、降序、分块升序等等对于无序存放的数组只能通过顺序查找的方法找到想要的数据顺序查找就是从数据空间的一端到另一端,逐个数据进行比对,直至找到想要的数据按照这种说法,最终可能出现两种情况:①找到元素,②找不到,超出边界这样每次需要判断两个条件,对于顺序表,可以设置一个哨兵,即将数组的首(或尾)空间空出来,平时不存放数据...
2020-03-18 20:41:10
741
原创 数据结构(一)线性结构(4)队列
队列的读写顺序为先入先出,根据结构可以分为单向队列、双向队列、循环队列、双向循环队列等这里以循环的顺序队列和单向链队列为例:循环的顺序队列定义:typedef struct QUEUE { int iData[ARRAY_SIZE]; int iFront; int iRear;}T_Queue, *PT_Queue;iData是数据域iFront、i...
2020-03-18 19:41:10
250
原创 数据结构(一)线性结构(3)栈
顺序表、链表是线性表的两种表示方法,指定的线性表的组织方式,对于不同的读写顺序的线性表,也有不同的定义,例如:元素按照先入后出的顺序读写的线性表称为栈元素按照先入先出的顺序读写的线性表称为队列按照上面的定义,可以组合出四种数据结构:顺序栈、链栈、顺序队列、链队列对于顺序栈,空间是事先分配好的,一般都会偏大,为了更好地利用顺序栈空间,可以将一个大栈拆分为两个小栈,大栈的两端分为别两个...
2020-03-18 19:18:18
186
原创 数据结构(一)线性结构(2)链表
链表是线性表的另一种表示方法,其特点是每个元素包含数据域和指针域,指针域的存在使得链表元素之间在空间上不必连续(即地址不连续),并且链表元素节点可以用时分配,比顺序表要灵活,但如果节点数较多,耗费空间资源比顺序表要多链表有单向链表、双向链表、十字链表、循环链表等,这里仅简单介绍单向链表,其它链表形式大同小异其基本定义:typedef struct LIST{ int idata...
2020-03-18 18:50:29
290
原创 数据结构(一)线性结构(1)顺序表
线性表是最基本、最常用的数据结构,大部分线性表中数据元素之间的关系是一对一的关系,除了首尾元素,其它元素都是首尾相连的其表示方法主要有顺序表示(顺序表)以及链式表示(链表),在本节介绍顺序表的一些操作实现顺序表至少包含一个用于存储数据的数组和一个表示数据个数的变量,因此顺序表可定义为:typedef struct { int aiArray[ARRAY_SIZE]; i...
2020-03-11 00:51:01
4080
原创 VS闪退解决办法
一1、菜单栏选中 “调试=>属性”2、选中 “配置属性=>链接器=>系统”3、子系统中选择控制台二、1、菜单栏中选中 “调试=>选项”2、选中 “调试=>常规”3、取消 “调试停止时自动关闭控制台”三、确保项目平台与调试平台一致(均为x32或均为x64)项目平台显示于第二张图片的上半部分...
2020-03-09 18:51:34
2553
原创 主机与虚拟机(ubuntu)可以互ping,虚拟机不能上网解决办法
1、点击右上角圈住的按钮2、配置VPN3、双击使用的网卡,我这里只有eth44、根据主机网络属性设置IPv4,注意DNS也要设置!注意DNS也要设置!注意DNS也要设置!...
2020-01-28 21:58:33
1925
1
原创 蓝桥杯单片机组经验分享之(三)各模块用法(3)继电器、蜂鸣器
继电器和(有源)蜂鸣器用法类似LED,挂载在锁存器U9上,因为继电器和蜂鸣器需要提供较大的驱动电流,锁存器驱动能力不够,因此锁存器后加入了ULN2003提高带负载能力,驱动电流型设备,连接如下图 继电器、蜂鸣器分别接于QUT5、OUT7,锁存器的操作方式同与前篇所讲相同ULN2003中,公共端COM接VCC,当INx中输入高(低)电平,OUTx输出为低(高)电平...
2019-12-25 12:11:09
1733
2
原创 蓝桥杯单片机组经验分享之(三)各模块用法(4)定时器
定时器是单片机里非常重要的一个模块,必须熟练掌握,本篇按这样的顺序展开:一、简单介绍定时器二、定时器基本用法三、定时器高级使用技巧(linux中常用的思想)一、简单介绍定时器在说定时器之前,先提一个比较重要的东西,传统51单片机是12T的,而15单片机是1T的,单片机复位后定时器默认处于12T模式,可以通过AUXR寄存器设置定时器工作在1T模式12T单片机的机器周期为...
2019-12-25 00:39:43
3138
1
原创 蓝桥杯单片机组经验分享之(三)各模块用法(1)138译码器
138译码器的设置目的是为了实现IO复用,单片机上IO资源紧张,挂载的外设较多,为了解决这一矛盾,引入了138译码器单个138译码器能够利用3个IO实现8路选择(在逻辑上相当于扩展了5个IO),比赛专用开发板上138的连接方式如下:左端输入ABC接单片机的P25、P26、P27,输出Y0~Y7分别对应不同的外设,通过ABC三位不同组合可以对应到Y0~Y7八种输出状态,从而选中不同输出通道所...
2019-12-24 23:52:29
1704
原创 蓝桥杯单片机组经验分享之(二)基本功能模块介绍
这里主要列出一些以往考过的模块0、定时器及其中断(重要性毋庸置疑) (外部中断用法同51一样,可以参考51开发板视频)1、显示模块:LED、数码管(必考项目,LCD暂时没考过)2、输入模块:独立按键、矩阵键盘(独立按键考得多,但矩阵键盘不能忽略,引脚定义跟一般市面上51有所区别,需注意)3、输出模块:继电器、蜂鸣器(二者至少考一个)4、传感模块:光敏电阻、温度传感器、超声波(...
2019-12-24 23:05:06
837
原创 蓝桥杯单片机组经验分享之(一)引言
一、开篇激励:蓝桥杯单片机组真的是非常容易拿奖的,尤其是省赛,水军特别多,结合我以及我的师兄师姐的参赛经验,基本上编程题全部完成就能保证省一了(至少广东是这情况),至于想拿国一的话得靠平时专业知识的积累了,只靠程序高分是拿不到国一的,第八届我的师兄参加国赛只有一个小功能没有实现,最后国三,很大程度是因为客观题成绩拖了后腿二、比赛简要说明:1、时长:五个小时(省赛国赛都一样)2...
2019-12-24 22:28:58
4745
原创 平衡小车设计_5_参数整定
平衡小车设计_5_参数整定整定顺序:角度环=>转速环=>转向环;P => I => D整定原则:先定极性、再定大小;从小到大1、角度环整定:参数P:1、定极性:给一个较小的值,观察小车倒下时车轮旋转方向,若小车行进方向与倒下方向相同,极性正确2、定大小:从小到大,调至小车刚开始出现低频振荡参数D:1、定极性:P参...
2019-06-15 22:37:26
1199
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅