历史上的今天
返回首页

历史上的今天

今天是:2025年01月28日(星期二)

2020年01月28日 | 【嵌入式】S3C2410平台移植linux 2.6.14内核

2020-01-28 来源:eefocus

小续

第一次接触内核的东西,有点小激动啊


激动归激动,这实验还是要继续做下去,书上三两句话就带过去的,剩下的就留给我们了,着实考验动手能力啊


当编译过内核之后,发现这个过程也不复杂嘛(复杂的是内核的配置),不过对于没接触过的人来说,也能够折腾一段时间的了,所以记下这个过程,其中也有些需要注意的地方,然后给没接触过的人分享下


环境如下

操作系统:ubuntu 12.04LTS

交叉编译工具:arm-linux-gcc 3.2

开发板:FS2410

linux内核:linux 2.6.14

 

mystery@lcw:~/Downloads$ cat /etc/issue

Ubuntu 12.04.2 LTS n l

mystery@lcw:~/Downloads$ arm-linux-gcc -v

Reading specs from /usr/local/arm/bin/../lib/gcc-lib/arm-linux/3.2/specs

Configured with: ./configure --target=arm-linux --prefix=/usr/local/arm/ --with-headers=/home/sylam/armbuild/src/linux/include --disable-shared --disable-threads --enable-languages=c : (reconfigured) ./configure --target=arm-linux --prefix=/usr/local/arm/ --with-headers=/home/sylam/armbuild/src/linux/include

Thread model: posix

gcc version 3.2

 

mystery@lcw:~/Downloads$ ls /home/mystery/Downloads/ 

cross-3.2.tar.bz2                      linux-2.6.14

eclipse-cpp-juno-SR2-linux-gtk.tar.gz  linux-2.6.14.tar.bz2

google-chrome-stable_current_i386.deb  wps-office_8.1.0.3724~b1p2_i386.deb

jdk-7u17-linux-i586.tar.gz             wps_symbol_fonts.zip

mystery@lcw:~/Downloads$ 

 


准备工作

决定在哪里编译你的内核
你需要决定你要在哪里编译你的ARM Linux内核。一个比较好的位置就是在你的home目录,我这里直接下载了解压后就编译了,所以就在download目录下进行的

决定内核的版本号
你需要决定你想要编译哪个版本的linux内核。大多数然想要编译最新版本的稳定内核。有一套表示版本号的机制,可以帮助你决定识别一个特定的发行版本。
对于任何的内核版本x.y.z,
* x -这个是主版本号
* y -这个是次版本号,这里:
偶数表示“稳定的”内核发行
奇数表示"开发"或者"beta"内核发行版本,相对来说不稳定。
* z -这是这个内核的补丁级别。
这个版本号表示了内核版本的主线。我这里按照书上的,选择了linux 2.6.14的内核,大家在www.kernel.org可以找到下载地址哈。


开始工作

1. 首先,我们需要修改目录树根下的Makefile,指明交叉编译器,找银行也要先说明去哪家银行嘛,哈哈

找到

ARCH            ?= $(SUBARCH)

CROSS_COMPILE   ?=

 

修改成

 

192 ARCH            ?= arm

193 CROSS_COMPILE   ?= arm-linux-gcc

 

 

<注意1>这里我开始出现了一个错误,在打arm的时候后面多打了一个空格,结果后面编译的时候出现

mystery@lcw:~/Downloads/linux-2.6.14$ make menuconfig                            

make: *** /home/mystery/Downloads/linux-2.6.14/arch/arm: Is a directory.  Stop. 

mystery@lcw:~/Downloads/linux-2.6.14$ vim Makefile 

 

好吧,第一次还是老实的慢慢打代码,切勿多出空格来了


2. 然后我们需要设置一下环境变量,知道去哪家银行取钱,然后需要知道银行在哪里啊

mystery@lcw:~/Downloads/linux-2.6.14$ export  PATH=$PATH:/usr/local/arm/bin/

 

这个路径当然是交叉编译器的位置了,在配置交叉编译器的时候,其实就已经把这个路径写入到配置文件去了,这里主要是说明需要指明银行的地点哈


3. 去银行总得有点事做吧,现在就来配置下这个清单,我也是第一次哈,所以内核产生文件就直接复制了

mystery@lcw:~/Downloads/linux-2.6.14$ cp arch/arm/configs/smdk2410_defconfig .config

 

<注意2>这里的.config文件应该由配置得到的,但是这之前,我也不知道怎么才算配置成功,对吧,所以先看结果,再回过头来学习,就容易多了,不过这过程还是要说清楚


4. 知道要去银行干什么了,下面就直接去银行与工作人员交涉吧。输入内核配置命令,进行内核选项的选择


内核支持4种不同的配置方法,这几种方法只是与用户交互的界面不同,其实现的功能是一样的;四种方法都是通过读取上面的配置文件“.config”隐藏文件,4种方法如下


make config : 基于文本的最为传统的配置界面,不推荐使用  make menuconfig : 基于文本选单的配置界面,字符终端下推荐使用  make xconfig : 基于图形窗口模式的配置界面,X-Window下推荐使用  make oldconfig : 自动读入“.config”配置文件,并且只要求用户设定上一次没有设定 过的选项


在这4种模式中,make menuconfig使用最为广泛,我这里也使用这种哈

mystery@lcw:~/Downloads/linux-2.6.14$ make menuconfig

HOSTCC  scripts/basic/fixdep

scripts/basic/fixdep.c: In function ‘traps’:

scripts/basic/fixdep.c:368:2: warning: dereferencing 

………………………

………………………

>> Unable to find the Ncurses libraries.

>>

>> You must install ncurses-devel in order

>> to use 'make menuconfig'

make[2]: *** [scripts/lxdialog/ncurses] Error 1

make[1]: *** [menuconfig] Error 2

make: *** [menuconfig] Error 2

 

代码有点长,中间省略了。

呃,出错了,不要急,看看错误原因:

>> Unable to find the Ncurses libraries.

>>

>> You must install ncurses-devel in order

>> to use 'make menuconfig'

 

意思是不能找到Ncurses libraries,你必须在这之前安装ucurses工具,好吧,照做

mystery@lcw:~/Downloads/linux-2.6.14$ sudo apt-get install ncurses-dev

[sudo] password for mystery: 

Reading package lists... Done

 

<注意3>ncurses用于make menuconfig界面显示

 

后面我无意间又发现了一个错误

 

mystery@lcw:~/Downloads/linux-2.6.14$ make menuconfig

 HOSTCC  scripts/lxdialog/checklist.o

 HOSTCC  scripts/lxdialog/inputbox.o

 HOSTCC  scripts/lxdialog/lxdialog.o

……………………

scripts/kconfig/mconf arch/arm/Kconfig

# using defaults found in .config

.config:622: trying to assign nonexistent symbol DEVFS_FS

.config:622: trying to assign nonexistent symbol DEVFS_FS

.config:623: trying to assign nonexistent symbol DEVPTS_FS_XATTR

Your display is too small to run Menuconfig!

It must be at least 19 lines by 80 columns.

make[1]: *** [menuconfig] Error 1

make: *** [menuconfig] Error 2

 

 

中间也省略了一些哈,你找到错误说明了吗:

<注意4>意思是说你的显示屏太小了,容不下Menuconfig,至少需要19*80的空间,好吧,照做


5. 下面就开始和银行人员交涉吧

mystery@lcw:~/Downloads/linux-2.6.14$ make menuconfig

scripts/kconfig/mconf arch/arm/Kconfig

#

# using defaults found in .config

#

.config:11: trying to assign nonexistent symbol GENERIC_IOMAP

 

配置选项出来了有木有啊

<注意5>在各级子菜单项中,选择相应的配置时,有3种选择,它们代表的含义分别如下

Y:将该功能编译进内核

N:不将该功能编译进内核

M:将该功能编译成可以在需要时动态插入到内核中的模块

在编译内核的过程中,最麻烦的事情就是配置这步工作了,初次接触linux内核的开发者还真弄不清楚如何选取这些选项,还好这些配置大部分选项都可以使用其默认值,只有一小部分需要根据用户不同的需要选择

<注意6>选择的原则就是:将与内核其它部分关系较远且不经常使用的部分功能编译成为可加载模块,这有利用减小内核的长度,减小内核消耗的内核,简化该功能相应的环境改变时对内核的影响,不需要的功能就不要选,与内核关系紧密而且经常使用的部分功能代码直接编译到内核中

我们进入第二项“通用设置”看看

Linux Kernel v2.6.14 Configuration                                             

------------------------------------------------------------------------------ 

+----------------------------- General setup -----------------------------+   

|  Arrow keys navigate the menu.  selects submenus --->.          |   

|  Highlighted letters are hotkeys.  Pressing includes, excludes, |   

modularizes features.  Press to exit, for Help, |   

|  for Search.  Legend: [*] built-in  [ ] excluded  module  <>       |   

| +---------------------------------------------------------------------+ |   

| |()  Local version - append to kernel release                         | |   

| |[*] Automatically append version information to the version string (N| |   

| |[*] Support for paging of anonymous memory (swap)                    | |   

| |[*] System V IPC                                                     | |   

| |[ ] POSIX Message Queues                                             | |   

| |[ ] BSD Process Accounting                                           | |   

| |[*] Sysctl support                                                   | |   

| |[ ] Auditing support                                                 | |   

| |[ ] Support for hot-pluggable devices                                | |   

| +v(+)-----------------------------------------------------------------+ |   

+-------------------------------------------------------------------------+   

|                   

 

<注意7>大家注意到了吧,这里选择前面有中括号和圆括号,其实还有个尖括号。用空格键选择相应的选项时会发现中括号中要么是空,要么是“*”;尖括号中可能是空/“*”和“M”,分别表示包含选项/不包含选项和编译成模块;圆括号的内容是要求用户在所提供的几个选项中选择一项。

上面是什么意思呢?我解释下哈。

第一个是圆括号,就是让你从下面的选项中进行选择;我简单的翻译下哈:

( )本地版本-添加到内核发行版

[*]自动添加版本信息到原版本信息后面

[*]支持匿名分页存储

[*]支持系统V IPC通信机制

[  ]支持POSIX消息队列

…………

下面很多,就不看了哈,上面的意思就是:把(中括号中选择了的)自动添加版本信息到原版本信息后面/支持匿名分页存储/支持系统V IPC通信机制等等添加到新的内核版本中去,这下应该懂了吧;至于尖括号选项,就是前面说的Y/N/M,这里就不多说了啊

配置内核主要是根据你需要哪些功能,大家按照<注意6>进行配置就是了

 

6. 等配置好了,就把工作交给银行人员吧

 

mystery@lcw:~/Downloads/linux-2.6.14$ make zImage

make: arm-linux-gccgcc: Command not found

推荐阅读

史海拾趣

Belden Wire and Cable公司的发展小趣事

在第二次世界大战期间,Belden公司积极响应国家号召,将生产重心转向战争材料。其产品被广泛应用于坦克、飞机、移动无线电、潜艇、船舶、吉普车等各种军事机械中,为战争的胜利做出了重要贡献。这一时期的生产转型不仅展现了公司的社会责任感,也进一步提升了其在行业内的地位和影响力。

Furukawa Electric Co Ltd公司的发展小趣事

1902年,Joseph C. Belden在美国伊利诺伊州芝加哥创立了Belden公司。在创立初期,公司主要生产电线和电缆产品,并逐渐在行业内崭露头角。1905年,经过大量的实验和研究,Belden公司成功研发出“Beldenamel”绝缘材料,这种灵活的搪瓷绝缘材料极大地提升了线缆的性能和可靠性,为公司的早期发展奠定了坚实的基础。

EBG RESISTORS LLC公司的发展小趣事

为了进一步扩大市场份额,EBG RESISTORS LLC公司开始实施国际化战略。他们积极参加国际电子展会,与全球各地的客户建立联系。同时,公司还积极寻求与国际知名企业的合作,共同开发新产品。在XXXX年,公司成功打入欧洲市场,并在随后几年内陆续进入亚洲和北美市场。

Excelight Communications Inc公司的发展小趣事

Excelight非常重视企业文化建设。公司倡导“创新、协作、务实、进取”的企业精神,鼓励员工勇于探索、敢于创新。同时,Excelight还为员工提供了良好的工作环境和福利待遇,吸引了大量优秀人才的加入。

在企业文化的影响下,Excelight的团队凝聚力不断增强,员工的积极性和创造力得到了充分发挥。这使得公司在面对市场变化和竞争挑战时能够迅速作出反应和调整。

CHIMEI(奇美)公司的发展小趣事

奇美公司的创业历程始于XXXX年,当时电子产业正处于蓬勃发展的初期。公司创始人凭借对电子行业的敏锐洞察力和坚定的创业决心,带领一支充满激情和创造力的团队,开始了奇美的创业之路。在创业初期,奇美专注于电子产品的研发和生产,通过不断的技术创新和市场拓展,逐渐在行业内崭露头角。

Acculin Inc公司的发展小趣事

Acculin Inc最初是一家专注于电子元器件研发的小型企业。随着物联网和智能家居的兴起,公司敏锐地捕捉到了市场的机遇,开始研发一款低功耗、高集成度的传感器芯片。经过数年的努力,Acculin成功推出了这款芯片,并凭借出色的性能获得了市场的认可。随后,公司逐渐扩大了产品线,涵盖了多个电子领域,成为行业内技术创新的领军者。

问答坊 | AI 解惑

哪位大侠用过片内的可编程放大器及滤波器???

这是24位AD转换器的资料 我想用到片内的可编程放大器及滤波器 但不知如何用单片机对其内部寄存器编程 有人用过么…

查看全部问答>

【藏书阁】中兴通讯EDA工具手册

序  言 第一章   系统简介 1  系统组成 1.1  库 1.2  原理图输入 1.3  设计转换和修改管理 1.4  物理设计与加工数据的生成 1.5  高速 PCB 规划设计环境 ...…

查看全部问答>

这电路能跑起来吗

图中的D8实现半波整流,固体继电器还能过零检测吗?…

查看全部问答>

暂时没分了,此贴会加分,请教:怎样才能在PB里安装NETCFv35.wce.armv4.cab的内容?而不是在设备上安装

NETCFv35.wce.armv4.cab的管方做法是在设备上安装,但是对于大规模生产这个方法不可取。 我们想在PB里直接安装NETCFv35.wce.armv4.cab, 这样编译NK.BIN时,里面就包含了.net cf v3.5; 请教怎么做呢? 非常抱歉现在没分了,但是这个贴子我会加 ...…

查看全部问答>

任意分频的verilog的实现

好久没有来发自己的成果了,好不容易整理一份出来啦~希望大家给些意见~…

查看全部问答>

大家功率放大模块做得怎样啦?有不用BUF634就做出来比较好效果的么

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 大家功率放大模块做得怎样啦?有不用BUF634就做出来比较好效果的么? 比如带宽多少?负载多少?电流多大?输入信号幅度多大? 我们用通用运放搭的,也做了扩流,可波形出来就是失真啊…… &nb ...…

查看全部问答>

求cyclone II ep2c8t144c8n的原理引脚图

急求cyclone II ep2c8t144c8n的原理引脚图…

查看全部问答>

参与Silicon Labs 2014技术创新巡回研讨会,赢新颖大礼

    由中国最大本土分销企业世强携手业界领先的高性能混合信号IC供应商Silicon Labs举办的创新技术巡回研讨会将于近期全面启动。本次研讨会主要针对在职研发工程师,Silicon Labs的资深技术专家将亲临现场,带来处于创新最前沿的设计技术 ...…

查看全部问答>

430用iar如何校准

手册上说g2553最高频率是26mhz,那怎么设置它的频率呢。 BCSCTL1 = CALBC1_16MHZ;                     DCOCTL = CALDCO_16MHZ; 我用上面的代码,为啥编译错误呢,求 ...…

查看全部问答>