嵌入式开发实验笔记( 一 )

2017年5月31日

简要:

主要涉及了, 在Ubuntu为PC的主系统时的一些烧写U-boot, 和kernel的注意事项;

主要内容:

烧写U-boot:

  1. 由于老版的U-boot对最新版的arm-linux-gcc支持不好所以, 编译时, 应该使用旧版的arm-linux-gcc支持不好所以, 编译时, 应该使用旧版的arm-linux-gcc。
  2. 编译的操作过程:
  1. 将U-boot压缩文件和对应的补丁文件复制到自己的工作目录下
  2. 解压U-boot, 命令: tar -xjf filename
  3. 进入解压后的U-boot目录, 并打补丁。命令: cd filename; patch -p1 < ../filenameofpatch
  4. 根据自己开发板的芯片不同的, 调用相关配置文件进行配置。命令: (以s3c2440为例) make 100ask24x0_config
  5. 修改顶层Makefile: (空白处添加)
  • ARCH = arm
  • CROSS_COMPILE = arm-linux-
  1. 开始编译。命令: make
  2. 烧写时, 可以参考裸机烧写方式: sudo oflash 0 1 0 0 0 u-boot.bin

烧写kernel:

  1. 注意: kernel的编译过程有三点:
  1. make menuconfig 时终端尽量全屏;
  2. 目测好像编译只能在32位Ubuntu上才能操作成功;
  3. 一定要安装 ncurses程序库, 不然最后make menuconfig 会出现错误;
  1. 配置方式有三:
  1. 直接make menuconfig,然后自己一项一项进行配置
    . 在kernel的默认配置里找到与自己芯片最接近或者自己的芯片的默认配置
    • 默认配置在 ./arch/arm/config 目录之下
    • 命令:
make s3c2410_defconfig (以三星s3c2440为例)
make menuconfig
  1. 使用厂家提供的配置文件, 并将厂家的配置文件更名为 .config(ps:文件一定放置在kernel的根目录下)
make menuconfig
  1. 编译时的注意事项:
  1. 由于kernel的版本过低, 与现版本的make不兼容, 所以会出现如下错误:
    Makefile:416: *** mixed implicit and normal rules: deprecated syntax
    Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
    make: *** No rule to make target 'menuconfig'. Stop.
    解决方法:
打开Makefile,  修改对应行: 
    416: config %config: scripts_basic outputmakefile FORCE
            $(Q)mkdir -p include/linux include/config
            $(Q)$(MAKE) $(build)=scripts/kconfig $@
    修改为: 
    %config: scripts_basic outputmakefile FORCE
            $(Q)mkdir -p include/linux include/config
            $(Q)$(MAKE) $(build)=scripts/kconfig $@
    1449: / %/: prepare scripts FORCE
            $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
            $(build)=$(build-dir)
    修改为: 
    %/: prepare scripts FORCE
            $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
            $(build)=$(build-dir)
  1. 最后编译: make uImage (生成的uImage在 arch/arm/boot/uImage)
  2. 烧录操作: 烧录方式, 是在有U-boot的情况下通过tftp烧录
  1. 对于tftp的相关配置, 参考: http://www.linuxidc.com/Linux/2016-07/133255.htm
  2. 对于板子和PC机的连接:
  • 连三条线: USB, COM, 网线,
  • 设置电脑以太网静态ip, 网关, 掩码(参考相关教程)
  • 通过板子 ping 电脑的静态ip 检验是否链接。(前提时修改U-boot环境变量中的serverip为电脑静态ip)
  • 设置虚拟机为桥接模式, 同时选择复制物理网络连接状态, 编辑->虚拟网络编辑器->更改设置->还原默认设置->Vment0桥接模式->选择网卡;
  1. 选择有线网卡, 无法上网, 但可以和板子通信, 无法与主机通信;
  2. 选择无线网卡, 可以上网, 无法与板子通信, 可以与主机通信;
  1. 将uImage复制到tftpboot目录下
    在板子U-boot中执行:
tftp 30000000 uImage (下载 kernel)
nand erase kernel (擦除分区)
nand write.jffs2 30000000 kernel (烧写kernel)

文件系统

tftp:

tftp 30000000 filename.yaffs2
nand erase root
nand write.yaffs 30000000 0x00260000 $(filesize)
OR:
tftp 30000000 filename.jffs2
nand erase root
nand write.jffs2 30000000 0x00260000 $(filesize)

完成后 reboot || 重新上电

完成!!

补充说明

2017年10月31日

编译器选项(arm-linux-gcc)

1. 总体选项

  1. -c:
    预处理, 编译和汇编源文件。不作连接, 生成OBJ文件。
  2. -S:
    编译后停止, 输出非汇编语言文件对应的汇编语言文件。
  3. -E:
    预处理后停止, 并且将代码送往标准输出;
  4. -o file:
    指定输出文件为file;
  5. -v:
    显示制作GCC工具自身时的配置命令; 还有一系列相关的版本号;

2. 警告选项 (-Wall)

打开所有需要注意的警告信息。

3. 调试选项 (-g)

以操作系统的本地格式产生调试信息;

4. 优化选项

  1. -O或-O1:
    一级优化, 减少目标码大小和执行时间;
  2. -O2
    进一步优化, 执行几乎所有优化操作;
  3. -O3
    优化更多, 比-O2多打开了"-finline-functions"
  4. -O0;
    不优化;
  5. 多个-O选项, 生效最后一个;

5. 连接器选项

  1. object-file-name:
    没有格式说明的文件, 默认为OBJ文件或库文件。
  2. -library:
    连接名为library的库文件; -L指定库文件路径。

(以下两个选项多用于编译bootloader, 和内核)

  1. -nostartfiles:
    不连接系统标准启动文件;

  2. -nostdlib:
    不连接系统标准启动文件和标准库文件。

  3. -static
    在支持动态连接的系统阻止连接共享库;

  4. -shared
    生成共享OBJ文件;

  1. 生成静态库:

    ar rcs libsource.a source.o

  2. 生成动态库:

    gcc -shared -fPIC -o libsource.so source.o

补充说明

2017-11-06

  1. linux内核编译时, 若想生成uImage(内核文件的'头')。需要有mkimage命令:
    安装命令:
sudo apt-get install u-boot-tool
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容