File size: 21,232 Bytes
48e7c56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778







BSc: Advanced Linux
===================






Contents
--------


* [1 Advanced Linux](#Advanced_Linux)
	+ [1.1 Short Description](#Short_Description)
	+ [1.2 Prerequisites](#Prerequisites)
		- [1.2.1 Prerequisite subjects](#Prerequisite_subjects)
		- [1.2.2 Prerequisite topics](#Prerequisite_topics)
	+ [1.3 Course Topics](#Course_Topics)
	+ [1.4 Intended Learning Outcomes (ILOs)](#Intended_Learning_Outcomes_.28ILOs.29)
		- [1.4.1 What is the main purpose of this course?](#What_is_the_main_purpose_of_this_course.3F)
		- [1.4.2 ILOs defined at three levels](#ILOs_defined_at_three_levels)
			* [1.4.2.1 Level 1: What concepts should a student know/remember/explain?](#Level_1:_What_concepts_should_a_student_know.2Fremember.2Fexplain.3F)
			* [1.4.2.2 Level 2: What basic practical skills should a student be able to perform?](#Level_2:_What_basic_practical_skills_should_a_student_be_able_to_perform.3F)
			* [1.4.2.3 Level 3: What complex comprehensive skills should a student be able to apply in real-life scenarios?](#Level_3:_What_complex_comprehensive_skills_should_a_student_be_able_to_apply_in_real-life_scenarios.3F)
	+ [1.5 Grading](#Grading)
		- [1.5.1 Course grading range](#Course_grading_range)
		- [1.5.2 Course activities and grading breakdown](#Course_activities_and_grading_breakdown)
		- [1.5.3 Recommendations for students on how to succeed in the course](#Recommendations_for_students_on_how_to_succeed_in_the_course)
	+ [1.6 Resources, literature and reference materials](#Resources.2C_literature_and_reference_materials)
		- [1.6.1 Open access resources](#Open_access_resources)
		- [1.6.2 Closed access resources](#Closed_access_resources)
		- [1.6.3 Software and tools used within the course](#Software_and_tools_used_within_the_course)
* [2 Teaching Methodology: Methods, techniques, & activities](#Teaching_Methodology:_Methods.2C_techniques.2C_.26_activities)
	+ [2.1 Activities and Teaching Methods](#Activities_and_Teaching_Methods)
	+ [2.2 Formative Assessment and Course Activities](#Formative_Assessment_and_Course_Activities)
		- [2.2.1 Ongoing performance assessment](#Ongoing_performance_assessment)
			* [2.2.1.1 Section 1](#Section_1)
			* [2.2.1.2 Section 2](#Section_2)
			* [2.2.1.3 Section 3](#Section_3)
			* [2.2.1.4 Section 4](#Section_4)
			* [2.2.1.5 Section 5](#Section_5)
			* [2.2.1.6 Section 6](#Section_6)
			* [2.2.1.7 Section 7](#Section_7)
			* [2.2.1.8 Section 8](#Section_8)
			* [2.2.1.9 Section 9](#Section_9)
		- [2.2.2 Final assessment](#Final_assessment)
		- [2.2.3 The retake exam](#The_retake_exam)



Advanced Linux
==============


* **Course name**: Advanced Linux
* **Code discipline**: xxxxx
* **Subject area**:


Short Description
-----------------


This course covers the following concepts: The fundamental principles for `booting`; Linux Kernel: understanding, programming, debugging, contributing; Device drivers; Power management; Graphical stack overview; Userspace: understating and interaction with Kernel, debugging userspace application and libraries.



Prerequisites
-------------


### Prerequisite subjects


### Prerequisite topics


Course Topics
-------------




Course Sections and Topics
| Section | Topics within the section
 |
| --- | --- |
| X86/Arm assembler introduction | 1. Basic assembler: registers, operations
2. x86 ABI reference
3. Context switching
4. CPU security rings
 |
| Userspace | 1. Executable files overview
2. ELF format
3. SO format
4. POSIX API
 |
| Userspace debugging (GDB) | 1. Debugging techniques overview
2. GDB (Gnu debugger) usage
3. Stack trace
4. Watchpoints/breakpoints
 |
| Linux Kernel introduction | 1. Kernel usage
2. Supported HW
3. Building the kernel
 |
| Booting the Kernel | 1. Boot Sequence
2. Device Tree
3. U-boot
4. initrd/initramfs
 |
| Kernel Modules | 1. Linux device and driver m​odel
2. Virtual Filesystems
 |
| Memory management | 1. Physical Memory
2. Virtual Memory
3. Memory Allocation
 |
| Threads, processes and scheduling | 1. Thread
2. Processes
3. Timers
 |
| Concurrent access to resources | 1. Mutexes
2. Spin locks
3. RW-locks
 |


Intended Learning Outcomes (ILOs)
---------------------------------


### What is the main purpose of this course?


The main purpose of this course is to give the students advanced knowledge of how Linux operation system boots, works and what parts it is consists of.



### ILOs defined at three levels


#### Level 1: What concepts should a student know/remember/explain?


By the end of the course, the students should be able to ...



* Principles of Operating Systems.
* Principles of bootloaders (first- /second- stage).
* Linux booting principles.
* Linux Kernel and apps debugging principles.


#### Level 2: What basic practical skills should a student be able to perform?


By the end of the course, the students should be able to ...



* Memory management in Kernel and userspace.
* Linux kernel subsustems.
* Concurrent access to resources.
* HW devices interaction in Linux.
* Interrupt and multithreading execution.
* Real- and virtual- filesystems interaction.


#### Level 3: What complex comprehensive skills should a student be able to apply in real-life scenarios?


By the end of the course, the students should be able to ...



* Kernel drivers design skills.
* Linux Kernel contribution and advanced GIT knowledge.
* C language low-level Kernel programming.
* C/C++ language system programming.
* POSIX API usage.
* Kernel and userspace debugging (including KGDB/GDB).
* x86/ARM assembly programming.


Grading
-------


### Course grading range





| Grade | Range | Description of performance
 |
| --- | --- | --- |
| A. Excellent | 100-150 | -
 |
| B. Good | 80-100 | -
 |
| C. Satisfactory | 60-79 | -
 |
| D. Poor | 0-59 | -
 |


### Course activities and grading breakdown





| Activity Type | Percentage of the overall course grade
 |
| --- | --- |
| Labs/seminar classes | 100
 |
| Interim performance assessment | 0
 |
| Exams | 50
 |


### Recommendations for students on how to succeed in the course


Resources, literature and reference materials
---------------------------------------------


### Open access resources


* Writing Kernel Module: i2c -
* Fundamental Linux Kernel programming by Krishenko V.A., Rayzanova N.U. - /
* Linux Operating System by Kuryachiy G.V., Malinskiy K.A. -
* Systemd after 10 years, historical and techical review, -
* Evolution of Linux Kernel by Novikov E.M., -
* Online resources shared by instructor


### Closed access resources


### Software and tools used within the course


Teaching Methodology: Methods, techniques, & activities
=======================================================


Activities and Teaching Methods
-------------------------------




Activities within each section
| Learning Activities | Section 1 | Section 2 | Section 3 | Section 4 | Section 5 | Section 6 | Section 7 | Section 8 | Section 9
 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Development of individual parts of software product code | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
 |
| Homework and group projects | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0
 |
| Midterm evaluation | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0
 |
| Testing (written or computer based) | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
 |
| Discussions | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
 |


Formative Assessment and Course Activities
------------------------------------------


### Ongoing performance assessment


#### Section 1





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | ARM architecture is faster than x86, itn’s it? | 1
 |
| Question | Why does antivirus software works in RING0? | 1
 |
| Question | What is the main purpose of having interrupts? | 1
 |
| Question | How-to debug anything inside interrupt context? | 1
 |
| Question | Show the difference in x86 and ARM CPU registers. | 0
 |
| Question | Create `basic` atomic operations for ARM in x86 (and vice versa). | 0
 |
| Question | Implement simple context switching without threads. | 0
 |


#### Section 2





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | Why can’t we just use .EXE and .DLL files on Linux? | 1
 |
| Question | Do .SO files actually share same memory physical addresses? | 1
 |
| Question | POSIX vs WinAPI? Which is better from portability point of view? | 1
 |
| Question | What is the most secure method for interprocess communication? | 1
 |
| Question | What is the fastest method for interprocess communication? | 1
 |
| Question | Create simple app for ELF format parsing. | 0
 |
| Question | Create app that shows dependencies between .so and executable file. | 0
 |
| Question | Create two apps communicating with each other. At least 2 methods. Compare the speed. | 0
 |
| Question | Create app with joinable and detachable threads. Check the difference. | 0
 |
| Question | Create app that uses fork() and execve() with controlling child process. | 0
 |


#### Section 3





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | What is GDB? What platforms can be debugged using GDB? | 1
 |
| Question | Do we have any alternatives for GDB? | 1
 |
| Question | What should we have related to the app to debug it in GDB? | 1
 |
| Question | Name popular GDB front-ends. Check what front-ends for GDB you already use. | 1
 |
| Question | What alternatives to GHIDRA do we have for different platforms? | 1
 |
| Question | Debug simple app using GDB with symbols in runtime. Use breakpoints and watchpoints and step by step debugging. | 0
 |
| Question | Load coredump and debug it in GDB. | 0
 |
| Question | Fix few variables in binary file using GHIDRA without source code. | 0
 |


#### Section 4





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | Monolithic kernel vs Micro-kernel. What is faster and why? | 1
 |
| Question | How Linux works on HW without IOMMU? | 1
 |
| Question | Tools required for building Linux Kernel. | 1
 |
| Question | Name few operations systems bases on Linux and name the difference. | 1
 |
| Question | Contributing to Open Source software and Kernel. What is the difference? | 0
 |
| Question | Git usage: commits, email-patches. | 0
 |
| Question | Git usage: rewriting history. | 0
 |
| Question | Building Linux Kernel for your own PC. | 0
 |
| Question | Running new Kernel on your machine. | 0
 |
| Question | Kernel config file location and editing. | 0
 |


#### Section 5





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | What is the difference between BIOS and UEFI? What we prefer in nowadays? | 1
 |
| Question | What is the usage for secure boot? What requirements should be met for this? | 1
 |
| Question | Why in x86 we do not have device tree? And why is it required for ARM platforms? | 1
 |
| Question | What is the purpose of having initramfs? Can we skip that stage? | 1
 |
| Question | Build U-boot | 0
 |
| Question | Rebuilding initramfs | 0
 |
| Question | Changing boot order of your PC. Creating simple systemd service. | 0
 |


#### Section 6





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | How kernel module can be compiled and used inside or outside Linux Kernel Image? | 1
 |
| Question | What is the purpose of System.map file for correct Linux Kernel functionality? | 1
 |
| Question | What is the real requirement to have virtual filesystems in Linux Kernel? | 1
 |
| Question | Name few real and virtual filesystems. Briefly describe usage in real life. | 1
 |
| Question | Develop and deploy simple Kernel Module outside kernel image. Dynamic Loading. | 0
 |
| Question | Develop and deploy simple Kernel Module inside kernel image. | 0
 |
| Question | SysFS/ DebugFS / ProcFS/ TmpFS usage | 0
 |


#### Section 7





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | Why do we need virtual memory? | 1
 |
| Question | Why does Linux Kernel maps itself to every process address space? | 1
 |
| Question | How does page fault handler work? | 1
 |
| Question | What is segmentation fault and how it handles in Linux Kernel? | 1
 |
| Question | Create simple allocator (myalloc/myfree). | 0
 |
| Question | Create benchmark for simple allocator. | 0
 |


#### Section 8





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | What is the difference between thread and process? | 1
 |
| Question | Can process exist without any threads? | 1
 |
| Question | What scheduling methods does Linux Kernel has? | 1
 |
| Question | What make `realtime` OS really realtime? | 1
 |
| Question | What is the difference between cooperative and preemptive multitasking? | 1
 |
| Question | Implement your own threads inside app. | 0
 |
| Question | Implement simple scheduler for your threading app. | 0
 |
| Question | Implement timer for your app without using `real` timers. | 0
 |


#### Section 9





| Activity Type | Content | Is Graded?
 |
| --- | --- | --- |
| Question | Why do we need locking structures? | 1
 |
| Question | Where is mutex preferred on spinlock? | 1
 |
| Question | Where is spinlock preferred on mutex? | 1
 |
| Question | Can we just write locking-free code? | 1
 |
| Question | What is deadlock and how it could be handled? | 1
 |
| Question | Implement simple locking structures. | 0
 |
| Question | Implement Wait-die lock. | 0
 |


### Final assessment


**Section 1**



1. Describe basic CPU registers and their purpose.
2. Describe x86 ABI.
3. What is context switching and how does it work?
4. Name all CPU security rings and describe security levels.
5. Interrupts. Interrupt handler.


**Section 2**



1. Describe ELF executable format.
2. Describe how Linux processes could be load from ELF file.
3. Describe .SO library loading and their layout in memory.
4. Describe methods of interprocess communication (at least 2).
5. POSIX. Describe network operations.
6. POSIX. Describe pthread library.
7. POSIX. Describe time operations.
8. Describe select(), poll() methods. Name the difference.
9. POSIX. Describe filesystem operations.


**Section 3**



1. GDB. Why do we need to have symbols? Can we debug without them?
2. GDB. Describe debugging techniques only using coredump.
3. GDB. Describe usage or breakpoints and watchpoints.
4. GDB/GDB Server. Remote debugging. Describe how to do that.
5. GDB. Describe multiarch debugging.
6. GDB. Describe how to debug multithreaded application.
7. GDB. Stack trace. Describe usage and how-to.
8. GHIDRA. Describe usage flow.


**Section 4**



1. Briefly describe modern OS architecture. (for ex. Linux)
2. Describe supported HW by Linux Kernel.
3. Describe contribution process to Linux Kernel.


**Section 5**



1. Name popular bootloaders and briefly describe the difference.
2. Describe all boot sequence starting from pushing START button.
3. Describe in details the role of initrd/initramfs in booting process.
4. First userspace process. Describe how it works and why do we need SystemV/system?


**Section 6**



1. Describe Linux device and driver model
2. Real- and Virtual- filesystems. Describe in details.
3. Name other Linux Kernel subsystems and their usage.


**Section 7**



1. Describe how virtual memory maps on physical memory.
2. Describe in details how TLB works. How TLB increases memory operations?
3. Describe structure of page table, its location and management from OS.
4. Describe memory allocation techniques. Describe one of them in details.


**Section 8**



1. Describe how threading works.
2. Describe pthread API usage.
3. Describe difference between monotomic and realtime clocks.
4. Describe scheduling strategies. Make a suggestion, which one is preferred for different situations.
5. Describe difference in memory management between threads and processes.


**Section 9**



1. Describe mutex internals.
2. Describe spin lock internals.
3. Describe deadlock problem and how it could be handled.
4. Compare different locking methods and make conclusion of which is faster and why.
5. Deeply describe wait-die locks.
6. P.1.2.10 Section 10
7. Section title: Kernel debugging
8. Topics covered in this section:
9. Debugging techniques
10. DebugFS
11. Other methods overview (J-Tag etc).
12. KGDB
13. What forms of evaluation were used to test students’ performance in this section?
14. Typical questions for ongoing performance evaluation within this section
15. Name and briefly describe kernel-debugging techniques.
16. What debug levels for printk do you know and what is their usage?
17. What other methods of Kernel debugging techniques do you know?
18. Why can’t we use regular GDB to debug Linux Kernel?
19. Typical questions for seminar classes (labs) within this section
20. Usage of DebugFS for basic debugging
21. Usage of printk and debug levels.
22. KGDB usage for Kernel debugging.
23. Test questions for final assessment in this section
24. Explain usage of debugFS in modern kernels.
25. Describe main kernel debugging techniques.
26. P.1.2.11 Section 11
27. Section title: HW busses
28. Topics covered in this section:
29. GPIO
30. UART
31. i2c
32. spi
33. pin muxing
34. DMA
35. What forms of evaluation were used to test students’ performance in this section?
36. Typical questions for ongoing performance evaluation within this section
37. What HW bus type should we prefer for flash memory?
38. What bus is the fastest?
39. What should we do if we don’t have enough available pins for our needs?
40. Can spi devices be connected in parallel? How can we do that?
41. DMA – overkill technique or our current basic needs? Briefly review advantages and disadvantages of DMA.
42. Typical questions for seminar classes (labs) within this section
43. Implement connection to other device using UART. Exchange data.
44. Note: additional tasks will be given depends on current HW availability.
45. Test questions for final assessment in this section
46. Describe i2c bus. Usage of i2c bus.
47. Describe spi bus. Usage of spi bus.
48. Describe GPIO subsystem. Usage of GPIO.
49. Describe pin muxing.
50. Describe usage of DMA and consider exchange speed with and without DMA.
51. P.1.2.12 Section 12
52. Section title: PCI
53. Topics covered in this section:
54. PCI Physical parameters
55. PCI Electrical parameters
56. PCI Logical model
57. PCI Configuration
58. What forms of evaluation were used to test students’ performance in this section?
59. Typical questions for ongoing performance evaluation within this section
60. Briefly describe PCI specification.
61. What is difference between PCI and PCIe?
62. Name devices that could be connected to PC using PCI bus.
63. Device tree and PCI. Briefly describe how we can configure them.
64. Typical questions for seminar classes (labs) within this section
65. Measure PCI Ex bus speed with different connection types: x1, x2, x4 and x16.
66. Test questions for final assessment in this section
67. Describe parameters of PCI bus interface.
68. Describe usage of PCI bus in modern PC/laptop.
69. Describe configuration and enumeration of devices on PCI bus.
70. P.1.2.13 Section 13
71. Section title: USB
72. Topics covered in this section:
73. USB Physical parameters
74. USB Electrical parameters
75. USB Logical model
76. USB Configuration and enumeration
77. What forms of evaluation were used to test students’ performance in this section?
78. Typical questions for ongoing performance evaluation within this section
79. Briefly describe USB specification.
80. USB/A/B – type C. Describe difference.
81. What devices could be connected using USB bus?
82. Why we do not reboot after USB device connection to discover it?
83. Can we add USB devices to device tree for faster enumeration?
84. Typical questions for seminar classes (labs) within this section
85. Implement simple USB device driver for keyboard/flash card/mouse etc.
86. Test questions for final assessment in this section
87. Describe parameters of USB interface.
88. Describe usage of USB in modern PC/laptop.
89. Describe configuration and enumeration of devices on USB.
90. P.1.2.14 Section 14
91. Section title: Graphical Stack overview
92. Topics covered in this section:
93. Framebuffer
94. X11
95. Wayland
96. UI interfaces: GTK/Qt
97. What forms of evaluation were used to test students’ performance in this section?
98. Typical questions for ongoing performance evaluation within this section
99. Linux- and Windows- comparison of graphical stack.
100. Can we access framebuffer when it is double- or triple- buffered?
101. What part of OS owns framebuffer?
102. How X11 knows when to redraw on screen info?
103. Can we use X11 and Wayland together?
104. Typical questions for seminar classes (labs) within this section
105. Create app with direct access to framebuffer.
106. Use X11 forwarding using SSH tunnel.
107. Create simple GTK/Qt application.
108. Test questions for final assessment in this section
109. Describe the usage of framebuffer.
110. Describe the purpose of X11 system.
111. Describe the purpose and advantages of Wayland framework.


### The retake exam


**Section 1**


**Section 2**


**Section 3**


**Section 4**


**Section 5**


**Section 6**


**Section 7**


**Section 8**


**Section 9**