历史上的今天
返回首页

历史上的今天

今天是:2024年12月08日(星期日)

正在发生

2020年12月08日 | TQ210——下载总结

2020-12-08 来源:elecfans

学习方法:(分阶段学习)-----内核学习是一个长期的过程


       1.学习使用内核提供的接口函数 (涉及到很多操作系统知识,编程规范)


       2.找到一个函数如do_fork来学习进程管理模块


       3.通过kmalloc函数来学习进程管理,通过do_irq学习中断管理


1.U-BOOT配置与烧写常用命令 (生成u-boot.bin)(u-boot下载地址:)


(1) u-boot配置及烧写


       tar xzvf*.zip


       tar xjvf*.bz2


       配置:make TQ210_config  运行:make ARCH=armCROSS_COMPILE=arm-linux-


       大约      2分钟后编译完成,生成u-boot.bin,然后烧写到开发板中


       烧写准备:网线连接,下载线连接,电源线连接 (ping通就可以),将u-boot.bin复制到tftp服务器目录下 (固化到开发板起始处)


       tftp30000000 u-boot.bin /*下载到内存中*/


       nand erase0 100000   /*擦除1M空间*/


       nand write30000000 0 100000 /*将30000000处内容写1M到硬盘开始处*/


(2) u-boot命令详解


       help:察看当前单板所支持的命令


       printenv:打印环境变量


       setenv:添加、修改、删除环境变量


       saveenv:保存环境变量


       tftp:通过网络下载文件


       bootmaddr:执行程序,addr是执行地址


       nand erase起始地址start 长度len ---     擦除start处开始的,长度为len的区域


       nand write内存起始地址 flash起始地址 长度len --- 将内存起始地址处,长度为len的数据,写入flash起始地址处


       nand read 内存起始地址 flash起始地址 长度len---将flash起始地址处,长度为len的数据,读到内存起始地址处


附:


       <1>  配置 U-Boot


       TQ210:  makeTQ210_config


       Smart210:  make smart210_config


       OK210:  make forlinx_linux_config


       OK6410:  make forlinx_nand_ram256_config


       Tiny6410:  make tiny6410_config


       TQ2440:  make TQ2440_config


       Mini2440:  make mini2440_config


       <2> 下载与运行


       TQ210:  tftp 0xc0008000 uImage


       Smart210:  tftp 0x20000000 uImage


       OK210:  tftp 0xc0008000 uImage


       OK6410:  tftp 0xc0008000 uImage


       Tiny6410:  tftp 0xc0008000 uImage


       TQ2440:  tftp 0x31000000


       Mini2440:  tftp 0x31000000 uImage


 


2.内核配置与编译


(1) 为什么要配置内核


       硬件需求  软件需求 ----选出需要的,去掉不要的


(2) 内核配置方法


       makeconfig:基于文本模式的交互式配置


       makemenuconfig:基于文本模式的菜单型配置 (更好一些)


       <*> 编译时比选的


        编译时可选的


       <>  不选的


(3) 内核配置结果:放在.config中


(4) 内核编译:make uImage j 2


       编译好的内核位于arch//boot/目录下uImage


(5) 清理内核:make clean   make distclean


mkimage工具讲解:(编译内核时将mkimage移动到/bin目录下)


uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件.


mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么


./mkimage -n 'U-boot' -A arm -O linux -T firmware -Cnone -d u-boot.bin u-boot.img


-A ==> set architecture to 'arch'


-O ==> set operating system to 'os'


-T ==> set image type to 'type'


-C ==> set compression type 'comp'


-a ==> set load address to 'addr' (hex)


-e ==> set entry point to 'ep' (hex)


-n ==> set image name to 'name'


-d ==> use image data from 'datafile'


-x ==> set XIP (execute in place)


参数说明:


-A 指定CPU的体系结构:


取值 表示的体系结构


alpha Alpha


arm A RM


x86 Intel x86


ia64 IA64


mips MIPS


mips64 MIPS 64 Bit


ppc PowerPC


s390 IBM S390


sh SuperH


sparc SPARC


sparc64 SPARC 64 Bit


m68k MC68000


-O 指定操作系统类型,可以取以下值:


openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos


-T 指定映象类型,可以取以下值:


standalone、kernel、ramdisk、multi、firmware、script、filesystem


-C 指定映象压缩方式,可以取以下值:


none 不压缩


gzip 用gzip的压缩方式


bzip2 用bzip2的压缩方式


-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载


-e 指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(因为前面有个mkimage添加的0x40个字节的头)


-n 指定映象名


-d 指定制作映象的源文件


 /mkimage -A arm-O linux -C gzip -a 0x20008000 -e 0x20008000 -d linux.bin.gz uImage  


-a参数后是内核的运行地址,-e参数后是入口地址


<1> 如果我们没用mkimage对内核进行处理的话,那直接把内核下载到0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag建议是由bootloader提供的,在u-boot下默认是由bootm命令建立的)。


<2>如果使用mkimage生成内核镜像文件的话,会在内核的前头加上了64byte的信息,供建立tag之用。bootm命令会首先判断bootm xxxx 这个指定的地址xxxx是否与-a指定的加载地址相同。


       (1)如果不同的话会从这个地址开始提取出这个64byte的头部,对其进行分析,然后把去掉头部的内核复制到-a指定的load地址中去运行之


       (2)如果相同的话那就让其原封不同的放在那,但-e指定的入口地址会推后64byte,以跳过这64byte的头部


 


3.内核模块


(1) 特点:<1> 模块本身并不被编译进内核文件(zImage或者bzImage)


               <2> 可以根据需求,在内核运行期间动态的安装或卸载


(2) 范例


// hello.c

#include

#include

static int hello_init(void)

{

       printf(KERN_WARNING"Hello,world!n");

       return 0;

}

static void hello_exit(void)

{

       printf("KERN_INFO"Goodbye,world!n");

}

module_init(hello_init);//加载内核模块

module_exit(hello_exit);//卸载内核模块

Makefile:


obj -m := hello.o


KDIR := /lib/modules/2.6.../build  # 内核代码路径


all:


       make -C$(KDIR) M=$(PWD) modules


(3) 安装与卸载


       安装:insmod  (insmod hello.ko)


       卸载:rmmod   (rmmod hello)


       查看:lsmod


(4) 模块声明


       MODULE_LICENSE("遵循的协议") --- 申明该模块遵守的许可证协议,如:“GPL“、”GPL v2“等


       MODULE_AUTHOR("作者") --- 申明模块的作者


       MODULE_DESCRIPTION("模块的功能描述") --- 申明模块的功能


       MODULE_VERSION("V1.0")--- 申明模块的版本


(5) 模块参数


       应用程序中:int main(int argc,char**argv)       argc表示命令行输入的参数个数,argv中保存输入的参数


       内核模块中:通过宏module_param指定保存模块参数的变量,模块参数用于在加载模块时传递参数给模块


       module_param(name,type,perm)


       name:变量的名称


       type:变量类型,bool:布尔型 int:整型 charp:字符串型


       perm是访问权限,S_IRUGO:读权限 S_IWUSR:写权限


       例如:


              inta = 3;


              char*st;


              module_param(a,int,S_IRUGO);


              module_param(st,charp,S_IRUGO);


(6) 符号导出


       内核符号的导出使用宏:EXPORT_SYMBOL(符号名)


(7) 总结


对比应用程序,内核模块具有以下不同:


       <1>.应用程序是从头(main)到尾执行任务,执行结束后从内存中消失。


       <2>.内核模块的初始化函数结束时,模块仍然存在于核中,直到卸载函数被调用,模块才从内核中消失。


 


4.Linux内核制作 (生成uImage)(www.kernel.com)


解压:     tar xzvf *.zip


              tarxjvf *.bz2


步骤:


(1) 清理 make distclean


(2) 配置 make menuconfig ARCH=arm


(3) 编译 make uImage ARCH=arm CROSS_COMPILE=arm-linux-


       提示:mkimage not found ---mkimage帮助加文件头


       在u-boot的tools目录中,移动mkimage到/bin下,再重复(3)操作


(4) 在/arch/arm/boot中生成了uImage


烧写到开发板:(固化到开发板5M处) 具体值参考/drivers/mtd/nand/s3c_nand.c文件


       tftp30000000 uImage


       nand erase500000 5000000


       nand write30000000 500000 500000


环境变量设置


       setenvbootcmd read 30000000 500000 500000;bootm 300000


 


5.根文件系统的制作 (套件下载:)


(1) 建立跟文件系统目录


       ---建议使用shell脚本


       <1> 创建目录


              mkdirbin devetc lib proc sbin sys usr mnt tmp var


              mkdirusr/bin usr/lib usr/sbin lib/modules


       <2> 创建设备文件


              cdrootfs/dev


              mknod-m 666 console c51


              mknod-m 666 null c13


       <3> 加入配置文件


              taretc.tar.gz ()


              mvetc/*...*/root/etc/ -rf


       <4> 编译安装busybox


       /**************************************************************


       下载 BusyBox 的源码包


       下载地址:www.busybox.net/downloads,最新版本为busybox-1.20.2


       tar jxvfbusybox-1.20.2.tar.bz2


       cdbusybox-1.20.2


       修改 Makefile 中的体系结构 ARCH 和交叉编译器前缀 CROSS_COMPILE


       vimMakefile


       把 164 行修改为:


       CROSS_COMPILE= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-       (路径不要复制,根据自己的情况填写)


       把 190 行修改为:


       ARCH = arm


       **************************************************************/


              makemenuconfig


                     BusyboxSettings àbuild Options->


                     选中 “Build busybox as astaticbinary”, 静态链接


                     CrossCompiler prefix (arm-linux-)


                     InstallationOptions->


                     选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的


                     /usr目录下,破坏宿主系统


                     BusyboxInstallation Prefix(/xxx/rootfs)


                     该选项表明编译后的busybox的安装位置


              make(编译)

推荐阅读

史海拾趣

冠图电子(GTL-POWER)公司的发展小趣事

冠图电子(GTL-POWER)发展故事之一:初创与技术积累

冠图电子(GTL-POWER)的故事始于2009年,当时它作为一家专注于中小功率模块电源、定制电源的新兴企业在广州成立。创始人凭借对电力电子技术的深刻理解和敏锐的市场洞察力,组建了一支专业的研发团队,致力于高品质模块电源的研发与生产。在公司成立初期,团队就明确了技术创新和质量为先的发展策略,逐步建立了微功率模块电源样品生产线,为后续的发展奠定了坚实基础。

冠图电子(GTL-POWER)发展故事之二:市场拓展与战略布局

随着技术实力的不断增强,冠图电子开始积极拓展市场。2010年至2012年间,公司先后在北京、上海、深圳等城市设立了办事处,构建了遍布全国的销售网络。这一战略布局不仅拓宽了销售渠道,还加强了与当地客户的紧密联系,进一步提升了品牌知名度。同时,公司还根据市场需求,不断优化产品结构,推出了多款具备自主知识产权的特色产品,如宽压DC-DC模块电源、光伏电源等,深受市场欢迎。

冠图电子(GTL-POWER)发展故事之三:技术突破与行业标准

冠图电子在技术创新方面不断取得突破,陆续开发了多款具有行业领先水平的电源产品。例如,公司成功开发出小型全功能单列直插DC-DC模块电源,解决了传统电源体积大、效率低的问题。此外,冠图电子还积极参与行业标准的制定工作,通过技术创新推动整个电源行业的发展。这些努力不仅提升了公司的行业地位,还为客户提供了更加可靠、高效的电源解决方案。

冠图电子(GTL-POWER)发展故事之四:品质管理与国际认证

为了确保产品质量,冠图电子建立了严格的质量管理体系,并通过了ISO9001权威认证。公司注重生产过程的每一个环节,从原材料采购到成品出厂都实行严格的质量控制。这种对品质的执着追求使得冠图电子的产品在市场上赢得了良好的口碑,吸引了来自全球30多个国家的600多家客户。国际市场的认可不仅提升了公司的品牌形象,还为公司带来了更多的业务机会。

冠图电子(GTL-POWER)发展故事之五:客户服务与持续发展

冠图电子始终坚持以客户为中心的服务理念,为客户提供从项目咨询、系统设计到技术支持的一站式服务。公司拥有一支专业的客服团队,能够迅速响应客户需求并提供专业的解决方案。此外,冠图电子还注重与客户的长期合作,通过持续改进产品和服务来满足客户的不断变化的需求。这种以客户为导向的发展策略使得冠图电子在激烈的市场竞争中保持了稳步发展,并逐渐成长为一流的微功率模块电源、定制电源供应商。

东科半导体(DK)公司的发展小趣事

面对电源管理芯片市场需求的不断增长,东科半导体(DK)公司决定投资扩产。公司投资数亿元建设新的生产线和研发基地,提升产能和研发能力。同时,公司还加大了对新技术、新产品的研发投入,不断推出具有竞争力的新产品。通过投资扩产和加大研发投入,东科半导体(DK)公司进一步巩固了其在电源管理芯片市场的领先地位。

以上五个故事从不同角度展现了东科半导体(DK)公司在电子行业中的发展历程和成就。这些故事不仅记录了公司的成长轨迹,也反映了公司在技术创新、产学研合作、市场拓展和品牌建设等方面的努力和成果。

Gilway Technical Lamp公司的发展小趣事
首先断开冰箱电源,确保安全。
Adaptive Interconnect Electronics, Inc. [AIE]公司的发展小趣事

为了适应全球电子市场的快速发展,AIE公司积极实施全球化战略。公司在多个国家和地区设立了分支机构或办事处,以便更好地服务当地客户。同时,AIE还积极参加国际电子展会和论坛,与全球各地的合作伙伴和客户建立了广泛的联系。这些举措不仅拓展了AIE的市场份额,也提升了公司的国际影响力。

亿佰特(EBYTE)公司的发展小趣事

亿佰特注重团队建设和人才培养。公司吸引了一批具有丰富经验和专业技能的人才加入,形成了一支高效、专业的团队。公司还注重员工的培训和发展,为员工提供广阔的晋升空间和职业发展机会。正是这支优秀的团队,为亿佰特的发展提供了源源不断的动力。

Global Mixed-Mode Technology Inc公司的发展小趣事
设计和实现一个简单的三相缺相报警灯电路,可以使用三个中间继电器分别接在三相电的L1、L2、L3相上,继电器的另一端接零线。继电器的常开触点与报警灯(如黄灯、绿灯、红灯)串联,形成指示灯电路。当三相电正常时,继电器均吸合,常开触点断开,报警灯不亮。当某一相缺相时,对应相的继电器失电,常开触点闭合,使对应的报警灯亮起。同时,可以加入声音警报电路,当任一相缺相时,触发声音警报。

问答坊 | AI 解惑

基于51单片机的数字信号发生器

本帖最后由 paulhyde 于 2014-9-15 04:15 编辑 基于51单片机的数字信号发生器 关键词:51 单片机,UART 通讯,模拟开关,波形转换  …

查看全部问答>

程序编译问题

有一个问题想请教一下高手,就是ADS1.2工程中建立了多个.C和.S文件,那么可不可以编译生成.BIN文件时只选择其中几个文件(如只编译主程序文件或启动文件),然后把生成的几个.BIN文件分别烧写到FLASH中指定的地址,这样程序的连接会不会有问题,若是不行请 ...…

查看全部问答>

请问DriverStudio 里带有TestCap例子吗?

我下载了WIN2003的DDK,研究里面的TestCap例子,我在论坛上听说DriverStudio 里也有TestCap例子,可是我在我自己的机器里找不到,我的机器安装的是DriverStudio3.0版本的,请问大家,到底有没有这个例子,如果哪位朋友有DriverStudio下的TestCap例子,请给 ...…

查看全部问答>

三色LED显示屏的设计与实现 模电的虚短和虚断

三色LED显示屏的设计与实现 模电的虚短和虚断…

查看全部问答>

指令中的>>是什么意思?

本帖最后由 dontium 于 2015-1-23 13:25 编辑 有这样一条指令: LDP #WDKEY >> 7h    ;外设数据页 相信各位高手都见过的,请教这个指令是什么意思,尤其是 >> 是什么意思?有什么功能?后边注释中的外设数据页又是怎么通过这 ...…

查看全部问答>

各位大虾,有没有用430单片机作过菜单呀,欢迎说说思路

各位大虾,有没有用430单片机作过菜单呀,欢迎说说思路。就是有三两个按键和一块液晶,按动一下其中一个按键,液晶显示不同的菜单,按动另外的按键可对内容进行修改,或者移动光标等操作,欢迎作过的同志提个思路,用C语言编写。…

查看全部问答>

【求助】关于MSP430的BSL下载问题。

产品已设计完成,现在想改为BSL下载,但遇到如下问题: CPU用是149,BSL接口是自己制作的,按网上流行推荐电路,P1.1 接PC的RXD;P2.2接PC的TXD,RST,和TCK都相应连接,采用串口取电的方式,正负电压分别大约是10V和-8V,并将CPU板的3.3V引入接口 ...…

查看全部问答>

求助C程序高手

本帖最后由 paulhyde 于 2014-9-15 09:33 编辑 void readmax188(unsigned char port) { uchar data i; ad_data=0; B=port;// 写控制字,控制字的起始位必须为1 MAX188_SCLK=1; MAX188_CS=1; DIN=0; DOUT=1; SSTRB=1; MAX188_CS=0; for ...…

查看全部问答>

初学者求救:基于MATALAB和CCS的IIR滤波器的设计

完成了FIR的设计,现在想要完成3路的IIR的设计,用MATALAB生成的头文件和FIR的很不一样,请高手指点啊。…

查看全部问答>