在 Ubuntu 中build kernel 参考如下:
[Ref] https://wiki.ubuntu.com/KernelTeam/GitKernelBuild 可以直接在宿主机调试kernel, 但是当发生崩溃之后,工作环境又要重新配置。
所以考虑用 qemu,因为它有个option: -kernel, 可以直接引导kernel。比 VirtualBox 等虚拟机更快速更方便。
尝试使用 qemu 直接启动主机上的kernel $ sudo qemu-system-x86\_64 -kernel /boot/vmlinuz-\`uname -r\`
这会提示缺少文件系统
可以使用 debootstrap 构建一个rootfs ``` IMG=qemu-image.img DIR=mount-point.dir qemu-img create $IMG 1g mkfs.ext2 $IMG mkdir $DIR sudo mount -o loop $IMG $DIR sudo debootstrap –arch amd64 jessie $DIR sudo umount $DIR rmdir $DIR
这里最好用一下 chroot 和 passwd 更新一下文件系统里的密码,以免启动之后登不进去。
petalinux 是针对 Xilinx FPGA-based SOC designs 的 embedded linux system development kit 。 包含了:
Yocto Extensible SDK Minimal downloads XSCT and tool chains PetaLinux CLI tools 详情参考 PetaLinux Tools Reference Guide。
**版本: v2018.2 June 6, 2018 **
不支持 ubuntu1804, 手贱装了ubuntu1804, 结果 build 的时候出现 Bitbake 运行不起来,google 一遍发现这版本petalinux 还是暂时不支持 ubuntu1804 ,遂重新装回1604. 总结:
petalinux 安装, 略。 BSP 安装 BSP 是petalinux 的一个参考开发板的基础配置。可以把它作为一个模板创建自己的工程。它提供 了一个 installable BSP files,包含了所有必要的 design 和 configuration files ,pre-built 和 tested hardwrae 和 software images.
链接时忽略文件中未用到的函数或者对象。这在移植代码过程中很有用, 我们就不需要去删除或者注释掉那些大量没用到的对象或者不需要去链接的对象。 For GCC, this is accomplished in two stages: First compile the data but tell the compiler to separate the code into separate sections within the translation unit. This will be done for functions, classes, and external variables by using the following two compiler flags:-fdata-sections -ffunction-sections
Link the translation units together using the linker optimization flag (this causes the linker to discard unreferenced sections):-Wl,--gc-sections
So if you had one file called test.
有些情况下,比如我们遇到文件名含有一些字符不容易输入时就很着急了,这时候就需要让linux shell像windows cmd.exe 一样自动补全部的文件名,且可自动按顺序一个个滚动切换。方法如下: 在用户目录创建 ~/.inputrc (若不存在则自己创建) 文件里添加一行: [code]TAB: menu-complete[/code] 。 登出再登陆用户就可以了。 For more details see the READLINE section in man bash .
Makefile 正如其名作为一个制作文件的工具,大大方便了进行大批量文件编译时的工作流程。这里简单的记录一个make 工具的基本使用规则。
1. Makefile 基本规则: target... : prerequisites ...
command
...
...
-------------------------------------------------------------------------------
target: 为目标文件,即所要生成的对象;
prerequisites : 为要生成target所需要的文件或是目标;
command: 即make需要执行的命令,(任意的shell命令,即对应编译器或者平台的命令)。
第一行表示依赖关系,第二行是规则。( 第二行必须由Tab键开头 )。
注意:
a. 只敲入make命令默认执行第一个target。
b. command 要用Tab键缩进
2. 比如有源文件:main.c api.c api.h 用gcc 作编译的过程:
gcc -c main.c gcc -c api.c gcc -o main main.o api.o
写成Makefile的话就是:
main: main.o api.o
gcc -o main main.o api.o
main.o: main.c
gcc -c main.c
api.o: api.c api.h
gcc -c api.c 另外Makefile简化格式:
1. 修改文件夹所有者 chown -R [owner] .. ; 修改当前目录下所有文件夹的所有都为owner, -R表示递归调用。
2. 解压命令 tar -zxvf xxx;
-c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 -z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出 下面的参数-f是必须的 -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
创建用户 useradd 修改密码 passwd 安装包 apt-get install apt-get update //更新源 iptables iptables -nv -L //列出 netstat ps aux 查看进程