一口LinuxB站直播现场答疑笔记汇总

文章目录

直播间信息

名字: 一口网Linux直播间
ID :22719960

http://live.bilibili.com/22719960

电子文档

yikoupeng

一、学习Linux环境安装

1. ubuntu下载地址

http://mirrors.aliyun.com/ubuntu-releases/16.04/ubuntu-16.04.7-desktop-amd64.iso

2. vmware下载地址

https://www.vmware.com/go/getworkstation-win

二、 如何学习嵌入式、Linux驱动?

参考以下嵌入式学习路线
https://blog.csdn.net/daocaokafei/article/details/108513929

建议:先学习第一阶段,把C语言基础打扎实,然后学习linux系统编程,
最后如果想继续深入驱动,建议购买一个arm板子进行学习,尽量选择资料视频齐全的板子,不要只关注板子价格。

参考哪些书籍?

宋宝华《宋宝华基于最新的Linux4.0内核》
关注公众号: 一口Linux
后台回复 : 宋老师

我写的驱动入门的教程:
https://mp.csdn.net/console/columnManage/10323327

三、物联网专业

1. 物联网涉及的专业课程

物联网不是一个新的行业,没有任何新的技术,只是传统技术的集合,形成的一个新的概念。

  • 硬件(stm32)、电子,电路设计

  • 无线通信协议: 感知层
    将电子模块通过这些无线协议可以联网 低功耗、速度快、带宽不高
    蓝牙 BLE 、 zigbee 、NBIOT、lwm2m、lora

  • 网关 :把采集的数据汇总发送到服务器
    嵌入式产品(arm + linux) 家用无线路由器,无线AP、小基站

  • 网络支持: 3大运营商
    万维网、广域网、internet

      	**移动**-移动端       **电信**-数据业务比较好-  电话-cdma   **联通**-都不好, 
    

pc :epon 光纤入户
手机 :wlan + 3G 4G 5G

  • 服务器(后台) : java + 数据库
  • 前端 : web server
    h5,android、ios

2. 就业方向

如果不是垄断行业,所选择的行业必须和互联网靠拢

万物互联

已经被互联网洗牌的传统行业:

物流、金融、教育(空中英语、学而思、新东方、艺术)、

幸存的行业

石油、烟草、医疗、

最牛的物联网中心: 无锡

很多高校,申请物联网专业,南邮 物联网学院。但是其实师资并没有跟得上。

四、学c 电路 选哪一个?

  1. 电路方向:
    电路设计 芯片集成度,
    技术含量 : 不高,
    职位 : 需求不多
    就业 : 很多公司不愿意招应届生,很多公司宁愿招一个有经验的,
    收入 : 单片机 15 , 驱动 25+
    颜色太炫,时间长了,眼睛受不了

越老越吃香: 有一点

  1. C方向

软件方向,

技术含量 : 单片机 - 前景一般, linux驱动 : arm+linux - 高一些
职位 : 多一些,底层比上层需求要少,
就业 : 很多公司不愿意招应届生,

越老越吃香: 单片机 - 2年, linux驱动: arm+linux - 高一些
收入 :

五、单片机转Linux?

可替代性

1. 单片机前景

2年,就学的差不多了,就遇到瓶颈了,领导会觉得10年经验和1-3年经验没什么差别,

keil iar

2. 怎么转

Linux + 驱动

  1. 基本操作

  2. 系统编程 文件IO 进程线程 网络 socket

  3. 系统移植 uboot 内核编译 驱动移植 文件系统制作

  4. 驱动架构 字符设备 块设备 网络设备

arm板子

先看资料全不全


走歌人 现场版 洒脱 豪放 漂泊

五、运维

centos
运维

发展,会一门语言 python shell

只要活干完了,8点多钟就可以下班了!

  1. 活干不完 11之后
  2. 8点多钟 是正常下班时间
  3. 就:8点钟下班 他觉得已经很幸福了

愿意去非洲 工资是零花钱 疟疾 孤独 + 寂寞

狼性文化,

为什么要离职?你应该去离婚啊!

六、汇编级的性能优化

编译器帮我们做好了
https://blog.csdn.net/daocaokafei/article/details/111054121

七、嵌入式前景

和互联网对比

优点:
不用堆代码,需求也会改(往往是硬件引起的需求更改),
越老越吃香,
可替代性

缺点:
枯燥
门槛特别高
要学的东西太多了, 2年入门 5年稍微独当一面,精通 10

收入
一开始不高,后劲还可以

九、内核api太多,如何看内核文件?

1 会看内核目录

https://www.bilibili.com/video/BV19v411h7g9/

比如:想学习i2c

i2c与驱动无关的代码,core

 \linux-3.14-fs4412\drivers\i2c

2 查阅代码

source insight

八、 C语言学习困难怎么办?

  1. 基本语法

后台回复: 电子文档

  1. 做项目

入门项目
《从0写一个电话号码管理的C入门项目【适合初学者》
https://blog.csdn.net/daocaokafei/article/details/119961171

  1. 提升
    加入一些库,

数据库: sqlite3
线程: pthread
套接字:socket

从0实现基于Linux socket聊天室-增加数据库功能-5

一定程度上,想到就能写出来!

  1. Linux内核

语法不是考虑的重点,

设计模式,

八、大一大二寒暑假干嘛?

C语言打扎实

【电子文档】

九、为什么大学教的c语言都是皮毛?

大学课程是怎么设置的?

  1. 时间、课时都定死了,只有实验能相对可以调整一下
  2. 老师,研究生+ 、博士,
    学历和能不能上好课 没有直接关系,
    大学老师关注什么? 钱 职称 职位 ==== 文章、申请课题
  3. 老师如何上课?读课件
  4. 老师编程水平如何?很一般, 必须通过项目来磨练。
  5. 学生能不能提意见?

费曼

十、什么是外包、外协?

进入华为的项目组,这种说辞的都是外包公司

外包公司:

中软国际、软通、中科创达、东软国际、文思海辉、诚迈、润和
  • 人力外派
    和中科创达签合同,人到华为上班

  • 项目外包
    和中科创达签合同,在中科上班,做的是华为的项目

优点:
收入还可以,一般高于市场价,
大的外包公司还比较稳定
学历要求低
上升的还挺快的
缺点:
面试,定岗
人力外派:缺少归属感

OD 德科

十一、ODM、OEM

OEM

贴牌
10万件 5000 尾单

ODM
做手机, 骁龙888

精一通百

十二、阻塞、非阻塞

内核等待队列参考 《手把手教Linux驱动9-等待队列waitq

阻塞函数

scanf

gets

read()
write()
recvfrom()

select()

进入阻塞状态下,进程会进入休眠,直到有其他任务把他唤醒,还有有信号打断 ctrl+c SIGINT
在这里插入图片描述

在这里插入图片描述

十二、证书

软考 3级 考
职称 评
PM

inline volatile
extern

十三、如何做内核编程?poll如何编写?

  1. 如何编译内核模块
  2. 字符设备架构 .open .read .write .poll
  3. 等待队列 wait queue

https://blog.csdn.net/daocaokafei/article/details/108071589
https://blog.csdn.net/daocaokafei/article/details/108171965
https://blog.csdn.net/daocaokafei/article/details/108172338
https://blog.csdn.net/daocaokafei/article/details/108219511
https://blog.csdn.net/daocaokafei/article/details/108846894
https://blog.csdn.net/daocaokafei/article/details/108846952

十四、如何移植一个RTC驱动

  1. 先了解该外设驱动内核是否支持?

  2. 已经在内核了

编译进去
make menuconfig
 重新编译内核即可

  1. 修改设备树
    先看下内核有没有相关说明文档

    但是没有,就去看下内核原始的设备树文件中,有没有

没有 ,只能去百度,搜索下

https://www.pianshen.com/article/39211943822/

十五 嵌入式测试

  1. Linux 入门知识点
    建议入门学习以下知识点:
    https://blog.csdn.net/daocaokafei/article/details/109288694

  2. 脚本
    shell脚本

  3. 硬件
    会看基本电路图,信号线,中断线,电源线,数据线(tx/rx)
    示波器
    万用表
    常见协议波形要会看!

  4. 文档

十六 字符设备、块设备、网络设备

  1. 字符设备架构:
    不定长,若干个数据(1-N)
struct cdev {
	struct kobject kobj;
	struct module *owner;
	const struct file_operations *ops;
	struct list_head list;
	dev_t dev;
	unsigned int count;
};
struct file_operations {
	struct module *owner;
	loff_t (*llseek) (struct file *, loff_t, int);
	ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
	ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
	ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
	int (*release) (struct inode *, struct file *);
};
  1. 块设备
    磁盘是如何管理的?
    按页管理,4k,

    驱动如何编写?
    驱动操作磁盘最小的单位就是bio。

block 512

struct gendisk {
	/* major, first_minor and minors are input parameters only,
	 * don't use directly.  Use disk_devt() and disk_max_parts().
	 */
	int major;			/* major number of driver */
	int first_minor;
	int minors;                     /* maximum number of minors, =1 for
                                         * disks that can't be partitioned. */

	char disk_name[DISK_NAME_LEN];	/* name of major driver */
	char *(*devnode)(struct gendisk *gd, umode_t *mode);

	unsigned int events;		/* supported events */
	unsigned int async_events;	/* async events, subset of all */

	/* Array of pointers to partitions indexed by partno.
	 * Protected with matching bdev lock but stat and other
	 * non-critical accesses use RCU.  Always access through
	 * helpers.
	 */
	struct disk_part_tbl __rcu *part_tbl;
	struct hd_struct part0;

	const struct block_device_operations *fops;
	struct request_queue *queue;
	void *private_data;

	int flags;
	struct device *driverfs_dev;  // FIXME: remove
	struct kobject *slave_dir;

	struct timer_rand_state *random;
	atomic_t sync_io;		/* RAID */
	struct disk_events *ev;
#ifdef  CONFIG_BLK_DEV_INTEGRITY
	struct blk_integrity *integrity;
#endif
	int node_id;
};
struct block_device_operations {
	int (*open) (struct block_device *, fmode_t);
	void (*release) (struct gendisk *, fmode_t);
	int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
	int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
	int (*direct_access) (struct block_device *, sector_t,
						void **, unsigned long *);
	unsigned int (*check_events) (struct gendisk *disk,
				      unsigned int clearing);
	/* ->media_changed() is DEPRECATED, use ->check_events() instead */
	int (*media_changed) (struct gendisk *);
	void (*unlock_native_capacity) (struct gendisk *);
	int (*revalidate_disk) (struct gendisk *);
	int (*getgeo)(struct block_device *, struct hd_geometry *);
	/* this callback is with swap_lock and sometimes page table lock held */
	void (*swap_slot_free_notify) (struct block_device *, unsigned long);
	struct module *owner;
};

块设备,驱动主要解析bio


/*
 * main unit of I/O for the block layer and lower layers (ie drivers and
 * stacking drivers)
 */
struct bio {
	struct bio		*bi_next;	/* request queue link */
	struct block_device	*bi_bdev;
	unsigned long		bi_flags;	/* status, command, etc */
	unsigned long		bi_rw;		/* bottom bits READ/WRITE,
						 * top bits priority
						 */

	struct bvec_iter	bi_iter;

	/* Number of segments in this BIO after
	 * physical address coalescing is performed.
	 */
	unsigned int		bi_phys_segments;

	/*
	 * To keep track of the max segment size, we account for the
	 * sizes of the first and last mergeable segments in this bio.
	 */
	unsigned int		bi_seg_front_size;
	unsigned int		bi_seg_back_size;

	atomic_t		bi_remaining;

	bio_end_io_t		*bi_end_io;

	void			*bi_private;
#ifdef CONFIG_BLK_CGROUP
	/*
	 * Optional ioc and css associated with this bio.  Put on bio
	 * release.  Read comment on top of bio_associate_current().
	 */
	struct io_context	*bi_ioc;
	struct cgroup_subsys_state *bi_css;
#endif
#if defined(CONFIG_BLK_DEV_INTEGRITY)
	struct bio_integrity_payload *bi_integrity;  /* data integrity */
#endif

	unsigned short		bi_vcnt;	/* how many bio_vec's */

	/*
	 * Everything starting with bi_max_vecs will be preserved by bio_reset()
	 */

	unsigned short		bi_max_vecs;	/* max bvl_vecs we can hold */

	atomic_t		bi_cnt;		/* pin count */

	struct bio_vec		*bi_io_vec;	/* the actual vec list */

	struct bio_set		*bi_pool;

	/*
	 * We can inline a number of vecs at the end of the bio, to avoid
	 * double allocations for a small number of bio_vecs. This member
	 * MUST obviously be kept at the very end of the bio.
	 */
	struct bio_vec		bi_inline_vecs[0];
};
  1. 网络设备

数据包,
sk_buff

struct net_device {
	char			name[IFNAMSIZ];
	int			irq;		/* device IRQ number	*/
	struct pm_qos_request	pm_qos_req;
};
struct net_device_ops {
	int			(*ndo_open)(struct net_device *dev);
	int			(*ndo_stop)(struct net_device *dev);
	netdev_tx_t		(*ndo_start_xmit) (struct sk_buff *skb,
						   struct net_device *dev);
}
struct sk_buff {
	/* These two members must be first. */
	struct sk_buff		*next;
	struct sk_buff		*prev;
}

十七、对日外包

东华理工 南昌

嵌入式专业

一门心思要出国,日本 11年-12

梁博

IBM,懂 嵌入式 + 日语

施乐!
《硅谷风云》

有基于这个特长,再加上技术的,可以有个不错的发展,

十八、学历问题

一个同学

  1. 专科
  2. 大三,专转本,读的二本
  3. 进入某个三本学校,实验员
  4. 2年后转讲师,
  5. 读了在职研究生
  6. 15年读博士,南京理工大学博士
  7. 2020年毕业,
  8. 进入大学当教授

十九、软件开发一般流程

举例:已经有产品了,还有部分功能要开发

市场人员 + 项目经理对接市场需求 《需求分析》
研发主管 《概要设计》
研发部 《详细设计》
研发部 编码
研发部 《代码走查》
研发部 《单元自测》
测试部 《集成测试》

小公司:(要求全能)
提需求
写代码
自测

FPGA

赛灵思,xilinx设计一个芯片,采样,verilog

IP核:协议栈、dma、
PCIE xdma
效率非常高

含金量很高,

就业领域

军工、通信

需求量不高

中兴华为

大厂  乙方、丙方,丁方

可能就没有精力去学ARM linux

该怎么办?

自学,

B站 : 线上大学

  • 系统化看一遍,多看几遍

c语言

公众号 一口Linux 回复【电子文档】

yikoupeng

本科生做什么嵌入式项目比较好?

水平: 自己水平

linux,c语言,硬件

做一个简单的物联网项目《物联网数据采集系统》

  1. 上位机 + 下位机
  2. 采集传感器 数据,可以控制外设
  3. 存储到数据库中
  4. 板子:stm32 、

数据库
嵌入式数据库sqlite3一文搞懂

进阶

  1. socket
  2. web服务器,通过浏览器可以访问数据

大专生 做什么项目?

半年C JAVA

C

JAVA
《图书管理》 单机,

 聊天室
	   C/S
	   socket
	   线程,多进程

学linux千万不要看《鸟哥私房菜》
当工具书来看。

用到的去搜索,

要有解决问题,

C++ 什么方向好 本三

  1. QT前景
    军工,
    手持终端 仪器仪表

  2. .net

  3. ios
    object-c

刚毕业小白想做嵌入式

尽量,本科,(函授、自考、夜大)

《某嵌入式培训机构教学总监总结的嵌入式学习路线》
C语言 Linux操作

Linxu系统编程:进程 线程、同步互斥,进程间通信
网络 :常见协议、组网、套接字,
ARM mips :
OS : linux 、

python有没有出路

运维有没有出路?

网络工程师 + 测试 + 售前 + 售后

有一定基础,

  1. 工具书《鸟哥私房菜》
  2. 《shell》
  3. 网络,《tcp/ip》,抓包工具,—>5G
  4. 数据库
  5. 建议往编程方向走----->python 写脚本

学算法、python

hadoop

Linux玩的溜

通过编写代码实现常用命令

看书好还是看视频好

有人指导你看书 有人指导你看书。
到底什么视频,

英语非常重要!!!!!

招聘 学历、 籍贯、 英语

阳光电源

安卓 + jini

pmon

大二软工 读研还是就业?

安徽师范大学 芜湖

鼓励考研----》 先保证考上----》 专业-----》 一本 211 985 ------》 城市问题

专科

  1. 专转本 专升本 二本 三本

亚信

朋友

大专、
专转本
GCT
三本学校:实验室老师---->讲师-------->中级职称
读了博士,去年毕业了,

whereis? reboot?

二本java

徐州工程学院 苏北小清华

提升学历,
考证、软考、职称、

徐州

qt

军工、汽车 手持终端
龙芯
前景

计划

春节后:基础阶段—linux基本操作-----C语言---- shell-------数据结构------linux系统编程—

文章 + 视频 + 直播

技术直播

  1. 枯燥

  2. 门槛高
    对主播要求很高,
    扎实的技术知识,知识面要广,
    知识的记忆,
    软件知识,

    会用不代表能讲明白,

    口才,

    程序猿特点?

    1. 嘴巴不会说,喜欢较真,
      程序是世界上最简单的,
      女孩子比较感性,思维逻辑是和男孩子是有差异的。
      不会哄人。 哄人 == 骗人 != 诈骗 代表当时的情感,
      直男癌,
      理工科,数学、物理、化学、dsp、信号系统、电磁场电磁波、线性代数、离散数学,大学物理,
      通信原理、工程数学、线性代数

      逻辑 充分必要

    2. 情商低,能捋的清代码,捋不清自己的女朋友为什么生气?也不知道如何哄女朋友。

    3. 不修边幅

    口才的提升

     培训之后才开始提升,
    
     驱动,嵌入式  
    
     **做笔记,知识看的再多记不住,不如少看几本书,你能把他说出来**
    

    《明朝那些事》

    计算机讲的有意思?

    嵌入式 Linux

在这里插入图片描述

static变量

 1 #include <stdio.h>
  2 
  3 
  4 int global = 10;
  5 
  6 static int sglobal ;
  7 
  8 void func(void)
  9 {
 10     static int peng = 0;
 11                                                                                                                                      
 12     printf("peng = %d \n",peng++);
 13 
 14 }
 15 
 16 int main(int argc, char **argv)
 17 {
 18 
 19     func();
 20 
 21     func();
 22 
 23 
 24     return 0;
 25 }

线程中的static变量

  1. 什么是线程?

公司 培训机构

老板
市场部—负责对接客户
技术部—上课

三个角色 就像 线程

合到一起,就像一个进程

公司和公司之间 就像进程之间

阿里巴巴 恒大

  1. API
    NAME
    pthread_create - create a new thread

SYNOPSIS
#include <pthread.h>

   int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);

   Compile and link with -pthread.

void *(*start_routine) (void *)

  1. 线程共享进程一些资源

全局变量,打开的文件描述符,
代码段,data

  1. 不共用
    局部变量 不共用
  1 #include <stdio.h>
  2 #include <pthread.h>
  3 
  4 void *func (void *arg)
  5 {
  6     static int a = 10;
  7 
  8     while(1)
  9     {
 10         sleep(1);
 11         printf("this is thread %d\n",a++);
 12     }
 13 }
 14 int main(int argc, char **argv)
 15 {
 16     pthread_t th;
 17     pthread_t th1;
 18 
 19     pthread_create(&th, NULL,  func, NULL);
 20     pthread_create(&th1, NULL,  func, NULL);
 21 
 22     while(1)
 23     {
 24         sleep(1);
 25     //  printf("this is main \n");
 26     }
 27     return 0;                                                                                                                        
 28 }

SDK

软件产业链

											           壳子
													  屏幕
												      软件

设计 (EDA)----》 芯片--------->(方案厂商)---------> 系统集成商
台积电 芯片厂商
龙芯

sdk, pmon kenel longix/rootfs

零基础,入门多长时间

  1. 学历
    本1

  2. 专业
    软工程

  3. java python 前端 大数据 ai vi (大厂)

海康威视 —> 安防
大华 ---->
宇视 ---->

linux vxworks fpga

运维

知识面广、脚本、python shell

考研

比较赞同,
普研 : 学硕 专硕

在职研究生, GCT 单证 、 MBA 双证

条件允许,去考

好处:
学历有一定含金量的
研究所、
找对象,
将来的圈子,

坏处:
比较水
二本学生、专业课不会,
3年时间,

学习技术最佳时间

18-25

IT喜欢年轻人

能加班、

性价比

IT
前5年, 5-15 多结交人脉

一、异常向量表为什么要修改基地址?

二、 应用层如何调用内核的函数?

    1. 系统调用
    1. 字符设备架构
    1. 文件
  •  DRIVER_ATTR()
    帮我们创建一个state文件加点的一个宏,(/sys/) find命令找个这个文件
    通过 echo 1 > state

三、抓包工具的使用

参考以下文章:

一文包你学会网络数据抓包

    1. 软件的使用
    1. 学会分析数据包
    1. ping
    1. ftp
    1. QQ数据包
  • 4000 4001 8000 8001
    

彭老师,关于您的“C代码解析网络数据包”文章:

假设文章中展示的数据包是在 Linux 服务器(LANG=UTF-8)中使用 tcpdump 抓取的来自于使用 GBK 编码的 Windows 客户端 TCP 报文,那么,数据包中“应用数据”部分是否还是保持 GBK 编码格式?另外,当数据包通过 DMA 进入内存过程中是否会被转变为 Unicode 编码呢?还是后续在应用层根据环境变量 LANG=UTF-8 对用户数据进行解码,从而导致可能的乱码出现?
还请大神拨冗指点。谢谢!!!

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一口Linux

众筹植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值