美文网首页嵌入式 Linux C ARM
嵌入式开发实验笔记( 一 )

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

作者: 信则无 | 来源:发表于2018-03-19 09:26 被阅读11次

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

相关文章

网友评论

    本文标题:嵌入式开发实验笔记( 一 )

    本文链接:https://www.haomeiwen.com/subject/vtsuqftx.html