Linux学习笔记

  • Ubuntu中打开终端后会自动执行~/(用户)目录下.bashrc中的指令;

  • 通常ZYNQ中BOOT.bin包含FSBL镜像、u-boot镜像(、PL端bitstream)。image.ub包含内核镜像、设备树dtb、INITRAMFS根文件系统;

  • 操作系统(内核)本身就是一个裸机程序,与其它裸机程序和uboot无本质区别。

  • uboot经过编译生成的是u-boot(elf文件),在操作系统下是可以直接执行的,但是不能烧录下载。需要用到arm-linux-objcopy工具进行加工(主要是去掉一些无用的内容),得到u-boot.bin镜像(image)。镜像就是用来烧录到iNand中执行的。

  • linux内核经过编译后生成vmlinux或vmlinuz(elf)。嵌入式系统部署时烧录的Image是由vmlinux/vmlinuz经过arm-linux-objcopy工具制作的。Image原则上就可以直接被烧录到Flash上启动执行,但还是将Image进行压缩,并在文件开头加上一段自解压代码,得到zImage。
    用于uboot启动的内核镜像uImage是将zImage通过uboot中的mkimage工具,在zImage前面加上64字节的uImage的头信息得到的。有些uboot也支持启动zImage。

  • 刚烧录的系统中flash环境变量分区是空白的,uboot第一次运行时加载的环境变量是代码中设置的默认环境变量。使用saveenv命令时,会将DDR中的环境变量保存到flash环境变量分区中,下次开机会在环境变量relocate时将flash中的环境变量加载到DDR中。
    default_environment在uboot源代码中被初始化为默认值,但在uboot的BL2 env_relocate代码会对flash中的环境变量分区进行CRC校验。若校验通过,这说明环境变量分区中有可用的环境变量,然后用此环境变量覆盖DDR中的default_environment。

  • uboot中的start.S的开头会占用16字节的空间(官方版uboot可能没有),这16个字节适配于sd_fusing中的mkbl1(mkbl1可能有不同的版本,其他的版本可能没有这16个字节的要求)。

  • 根文件系统为操作系统启动提供了根目录和进程1的用户态init程序。

  • kernel的链接脚本vmlinux.lds并不是直接提供的,而是由arch/arm/kernel/vmlinux.lds.S这个汇编文件经过编译得到的。
    因为汇编文件支持条件编译,这样的话可以灵活地得到链接脚本。

  • linux系统中,进程0是idle进程,为内核进程,所以在用户态的命令行中看不到;进程1是init进程(kernel_init),完成从内核态到用户态的转变,因此后续其他进程都可以工作在用户态;进程2是kthreadd,为linux内核的守护进程,保证linux内核能正常工作。

  • 普通文件(- regular),包括文本文件;
    目录文件(d directory);
    字符设备文件(c character);
    块设备文件(b block);
    管道文件(p pipe);
    套接字文件(s socket);
    符号链接文件(l link)。

  • 中断不参与进程调度,如果一旦在中断服务函数执行过程中休眠了,休眠了则意味着交出了CPU的使用权,CPU使用权则跑到了其它线程了,那么就不能再回到中断断点处了。

  • 因为内核空间不能直接操作用户空间的内存,因此需要借助copy_to_user函数来完成内核空间的数据到用户空间的复制。copy_to_user函数原型如下:
    static inline long copy_to_user(void __user *to, const void *from, unsigned long n)
    参数to表示目的,参数from表示源,参数 n 表示要复制的数据长度。如果复制成功,返回值为0,如果复制失败则返回负数。

  • 因为用户空间内存不能直接访问内核空间的内存,所以需要借助函数copy_from_user将用户空间的数据复制到内核空间中。
  • 关于Linux内核的标准输出,内核设备树中根节点(/)的子节点chosen中的stdio-path属性拥有最高优先级,其次是bootargs属性。如果U-Boot定义了bootargs环境变量,则会通过fdt_setprop函数在内核设备树的chosen节点中将该环境变量覆写给bootargs属性,也就是说U-Boot的环境变量bootargs比内核根节点下chosen节点的bootargs拥有最高的优先级。
    综上,标准输出优先级:内核设备树根节点下chosen节点的stdio-path属性 > U-Boot的环境变量bootargs > 内核设备树根节点下chosen节点的bootargs属性
  • Linux内核启动的时候会解析设备树中各个节点的信息,并且在根文件系统的/proc/device-tree目录下根据节点名字创建不同文件夹,如图:
    在这里插入图片描述
  • 用PC ping 正在运行U-boot的板卡会ping不通,是因为U-Boot为了精简,当外面ping自己的时候,不会返回数据包。如果板卡可以ping通PC就基本没问题。
  • 中断不参与进程(线程)调度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux学习笔记是关于学习Linux操作系统的记录和总结。在学习Linux时,你可能会遇到以下几个方面的内容。 首先,Linux是一个面向网络服务的操作系统,因此你可以随意更换桌面系统。Linux有多种不同的桌面系统供你选择。这意味着你可以根据自己的喜好和需求,选择适合自己的桌面环境。 其次,在Ubuntu中,root用户默认是被锁定的,因此你无法直接使用root权限进行操作。但是,你可以使用sudo命令来提升权限,以执行需要root权限的操作。通过sudo命令,普通用户可以在需要时暂时获得root权限,以便进行需要的操作。 此外,如果你需要修改内核为bash,可以使用vim编辑器打开/etc/passwd文件进行修改。在Linux系统中,vim是一种常用的文本编辑器,类似于Windows的记事本。通过编辑/etc/passwd文件,你可以修改用户的登录shell为bash。 总结起来,Linux学习笔记记录了学习Linux操作系统的过程和经验,包括选择适合自己的桌面环境、使用sudo提升权限以及通过vim编辑器修改/etc/passwd文件等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux学习笔记](https://blog.csdn.net/m0_65379736/article/details/125700177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值