admin@Cranes Varsity

Linux system programming

Linux system programming is the science and art of programming for the Linux operating system. It involves creating software that interacts with the underlying operating system components such as the kernel, device drivers, system calls, system libraries, file systems and network protocols. By understanding the Linux system programming, developers can create more efficient and optimized software applications that take advantage of the full range of Linux features and capabilities. System programming is vital for tasks such as system administration, network administration, software development, and cyber security. Linux Kernel: The Linux kernel is the core component of the Linux operating system. It is a software program that manages the computer’s hardware resources, including the CPU, memory, disks, and input/output devices. The kernel acts as a bridge between the hardware and software layers, providing a layer of abstraction that allows software to access hardware resources in a consistent and predictable manner. It also provides many important features such as process and memory management, file system management, device driver management, and networking. The Linux kernel is open source and is constantly being developed and improved by a worldwide community of developers. Monolithic Kernel: A monolithic kernel is a type of operating system kernel where all the kernel components like process management, memory management, device drivers, file systems etc. are part of a single executable image. In a monolithic kernel, kernel services are layered and interact directly with each other, and with the hardware. This contrasts with a microkernel, where only the most basic functions of the kernel, like scheduling and inter-process communication, are part of the kernel, while other services such as device drivers, file systems etc. run in user-space outside of the kernel. System Calls: System calls in Linux are functions that allow user-space programs to request services from the kernel. They provide the interface between user programs and the kernel, allowing processes to access hardware devices, request system resources and perform other low-level tasks. Examples of system calls in Linux include opening and closing files, creating processes, reading and writing to files, and allocating memory. As such, system calls are an essential part of Linux system programming. Uses of Linux: Linux operating system is widely used in various domains due to its flexibility, security, and affordability. Here are some of its uses: 1. Web servers: Linux is a popular choice for web servers due to its stability, performance, and security features. 2. Embedded systems: Linux is extensively used in embedded systems like routers, switches, mobile phones, smart TVs, and other electronic devices. 3. Cloud computing: Linux is commonly used in cloud computing platforms to provide scalable, cost-effective, and secure virtualized environments. 4. High-performance computing: Linux is widely used in high-performance computing environments for scientific and engineering applications such as weather modeling, computational chemistry, and physics simulations. 5. Desktops and laptops: Linux is used as the primary operating system for desktops and laptops, especially by software developers, researchers, and power users. 6. Gaming systems: Linux is used as the platform for gaming systems, such as Steam OS, which is designed for gaming on TV. 7. Security: Linux is well-known for its strong security features and is used in security appliances, firewalls, and intrusion detection systems. Linux Device Drivers Linux device drivers are software components that allow the operating system to interface with hardware devices such as network cards, sound cards, disk drivers, and many others. Device drivers act as a translator between the hardware components and the operating system, enabling the software to interact with the hardware. In Linux, device drivers are typically integrated into the kernel or loaded as kernel modules during the boot process. The Linux device driver framework provides a standard interface for developing and managing device drivers, ensuring consistent interaction with the underlying hardware across different systems. Character Device Drivers: Character device drivers are one type of device drivers used in Linux operating system. These drivers handle devices that communicate with the system on a character-by-character basis, such as simple input or output devices like serial ports or terminals. They allow user programs to interact with these devices by reading and writing data one character at a time, often using system calls like read() and write(). Examples of character devices include mice, keyboards, and printers. Block Device Drivers: Block device drivers are a type of device driver in Linux that handle input and output operations with block devices. Block devices are devices that store and retrieve data in blocks, such as hard disk drives, USB sticks, and solid-state drives (SSDs). Block device drivers manage requests to read and write data to block devices, and they also manage the buffering and caching of data. They provide an interface for user applications to access block devices, enabling the creation, deletion, and formatting of file systems on these devices. Linux device drivers are essential components that allow the operating system to interface with hardware devices. Here are a few of their uses: 1. Enhancing hardware functionality: By developing device drivers, users can improve the overall functionality of their hardware devices in the Linux operating system. 2. Supporting new hardware: Device drivers play an essential role in supporting new hardware and devices that they have relatively less support from the operating system. 3. Improving hardware performance: Device drivers can optimize the performance of hardware devices by ensuring that they interact with the operating system in the most efficient way possible. 4. Developing specialized hardware solutions: Linux device drivers facilitate the implementation of customized hardware solutions that are tailored to specific user and industry requirements.

Linux system programming Read More »

STRUCTURE PADDING

Structure padding mainly talks about memory for variables which are aligned based on the size of the variable. Let suppose a “char” of 1 byte memory can be assigned anywhere in between like 0x1000 to 0x1001. Same way if we have an “int” of 4 bytes memory can be assigned anywhere in between like 0x1004 to 0x1008. This structure padding concept is automatic for its member are byte aligned by the compiler. Structure padding is nothing but allocating more memory for a structure than required and that extra bytes are called as padded bytes. This structure padding happens of number of bytes accessed by the CPU per CPU cycle. Before introducing this structure padding Concept ,CPU used to get 1 byte of memory per CPU cycle. This is one of the disadvantages. Imagine I have Below Structure with me struct demo { char a; int b; float c; }; Total size of this structure(without structure padding) is 9 bytes. In order to allocate 9 bytes It needs 9 CPU cycle. To avoid this problem Structure padding concept came into picture. In structure padding , It will look for largest member and Per CPU cycle it can access that many bytes of Memory. Consider above Example, largest member is int and float both are bytes, so per CPU cycle it will get 4 bytes of memory. It will allocate memory just like above figure. So here 3 empty bytes are called as padded bytes and This is how structure padding happens. Let us consider one more Example, struct  demo { char ch; double d; int a; }; Here largest member is double so per CPU cycle it will get 8 bytes of mem Now, structure padding happens as shown in above diagram and here 11 bytes are getting wasted. When large amount of memory is getting wasted, It will be a drawback. Then we need to avoid structure padding. Inorder to avoid structure padding we need perform structure packing. That means we need to pack one byte at a time. We can do it in two ways We can use these two instructions with structure to avoid structure padding. For example, 1. #pragma pack(1) struct  demo { char ch; double d; int a; }; 2. struct  demo { char ch; double d; int a; }__attribute__((__packed__)); This about the structure padding. This can be both advantage and disadvantage. So we need to han

STRUCTURE PADDING Read More »

Li-Fi: The Brighter Way to Communicate

Globally, Wi-Fi has been used for years to access and transmit data. But more often than not, Wi-Fi and their modems have elicited unsavory remarks when more users have logged on.   Li-Fi is now poised to transform for the better the scenario of data transfer and access. What is Li-Fi??? How Li-Fi is generated?? The spectrum of visible light is considered 10,000 times bigger than that of radio waves on the electromagnetic spectrum, which measures radiation frequency. Deploying light can avoid the expenses required for the limited range of radio waves.

Li-Fi: The Brighter Way to Communicate Read More »

INTEGRATED RTOS FOR FAST AND EFFICIENT IOT DEVELOPMENT

Today’s competitive world of embedded systems and the internet of things is placing ever greater demands on developers. They need to produce products that optimize size, weight and power, as well as have focused feature sets that are also flexible so they can be quickly adapted to meet changing customer requirements. In terms of processors, this means a family that is built around a common, high-performance core that features low power consumption, but which as a series offers a range of selections in terms of on-chip functions and peripherals that present a compatible platform for software. This newer generation tends to be organized into such families that, with a common instruction set, encompass a range that provides scalability from small-scale to large-scale applications along with I/O, on-chip flash and RAM in market-leading sizes. Matching a real-time operating system (RTOS) to such a processor family requires that it be able to smoothly scale along the lines of power and performance offered by the line of processors. Ideally it should have a familiar, standard API such as POSIX, which is a Linux-compatible standard for embedded systems. It must have a set of core characteristics in a compact package along with a wide selection of tested and proven functional software modules that can be quickly integrated to match the application and selected processor along with the mix of on-chip and off-chip peripherals needed. This, of course, means a wide selection of such functional modules. Many vendors now offer integrated development kits that include a single-board CPU with an integrated RTOS along with peripherals and tools to help the developer get started immediately adding innovative value. Such an integrated platform supports eight principles required for fast and efficient IoT development: These features not only help guide development for focused design and meeting time-to-market demands, they also guarantee the functional considerations needed to work effectively in the internet of things. The platform’s rich modularity supports the lean development model by providing standardization, interchangeability of drivers, protocols and service modules, and portability of applications. This lets developers quickly adapt to changing customer requirements in the midst of a project. The integrated platform optimizes both hardware and software design on the go. Those same features make it adaptable — able to meet new market demands for features and functionality. Once a product is in place with a customer, the OEM must be able to quickly react to calls for additional features and expanded functionality — or even a smaller, lower-cost version of a product. Existing code can be moved to a higher performance processor and new features quickly added without serious revision of existing code. Security and safety go hand-in-hand and must be designed in from the ground up. If it can be hacked, it isn’t safe. Security begins with the selection of a secure initial design and extends through communication protocols, strategies such as password, electronic key and physical recognition, the use of secure booting, encryption and many more strategies. However, the judicious selection of the basic system architecture, hardware and software is also a key requirement. Two main features help ensure safety in systems. Determinism guarantees quick response to threatening conditions and makes the operation of the system predictable so that it can be reliably tested to meet strict timing requirements. Emergency stop with zero boot time means that a device can be halted instantly and restarted with zero boot time if required. Thus an unsafe condition can be halted immediately and brought back to a safe condition or the device diverted to an action to deal with the emergency. The internet of things is connected and must accommodate a very broad range of sensors, both wired and wireless. This means the full range of both wired and wireless connectivity. An RTOS that can deliver virtually any connectivity solution that can be selected and integrated into the RTOS design off the shelf is complete in that it contains everything you are likely to need for a project as it evolves. Among the supply of protocols should be those that can be used on the cloud side to easily and securely connect and transfer data and process commands. This requires the latest components and tools to deal with it and its newer applications, along with the ability to work with other leading-edge applications like Microsoft Azure. It also means the use of the best tools such as a wide selection among the IDE offerings, along with advanced support tools that allow use and tracking of memory and objects such as dials, gauges charts for variable displays, plus timing tools and displays to understand scheduling, interrupt processing and more. The incorporation of these latest tools, protocols and technologies and their availability across a matched RTOS and processor family makes this a truly cutting edge platform.

INTEGRATED RTOS FOR FAST AND EFFICIENT IOT DEVELOPMENT Read More »

How to choose ARM based processor

SCENARIO You are working on a new design and want to choose an ARM based processor. The questions at this point could be: ANSWER ARM is a fabless company. This means that ARM does not manufacture silicon. ARM designs processor cores and licenses them to its silicon partners. The silicon partners, in turn, design microprocessors/microcontrollers around these cores and manufacture the actual silicon or chips available for commercial purchase in the market. In case you are keen to know more about the ARM Cores than the silicon variants of the processors available in the market, you may refer to the Processor Overview section of ARM’s website. This section provides a lot of information on ARM processor families, the architecture, features, reference methodologies, etc. which would be a good starting point. If you wish to see more detailed documents on ARM cores, you may also refer to InfoCenter – the documentation section on the ARM website. Choosing an ARM based processor may involve a lot of technical and non-technical considerations. A partial list could look something like this: Technical: Non-technical:

How to choose ARM based processor Read More »

HOW SECURE IS YOUR LINUX?

Introduction: Linux is popular because, it is available for free of cost, so it was liked by the students, the developers can access and modify the source code due to its open-source nature, so it was liked by the programmers, it is having the ability to communicate with other different operating systems, so it was liked by the system administrators, and many more to put on.., but there is a potential threat w.r.t. LINUX kernel because of its open-source nature. Any hacker can easily understand the kernel architecture and thereby he can find and exploit the loopholes in the operating system and can steal the data easily. So, we will mainly concentrate on the types of attacks that can allow you to hack the Linux network. Attacks that can be used to gain access to LINUX network: Security measures to be taken care of:  LINUX or any other operating systems are not secure straight out of the box, but we can suggest you the minimum necessary precautions to be taken to avoid getting hacked by the attackers

HOW SECURE IS YOUR LINUX? Read More »

Five Technology Trends in Automotive Industry

The five technology trends to consider before the actual fully autonomous vehicles become a fact. These also show our future of automotive. Vehicles as IoT Devices The internet of things provides a great potential for interconnectivity and linking smart vehicles into a network, providing the possibility of optimizing vehicle performance and driver experience. This trend also leverages the ability of IC manufacturers to integrate enhanced functionality into the more powerful microprocessor. The wireless connectivity integration not only simplifies communication between vehicle’s subsystems but serves to link it with external networks, other vehicles or traffic control systems. The connected cars and the collected data offer potential for features such as predictive maintenance, traffic management and the most important enhanced safety and emergency response capabilities. Our vehicles are no longer limited productivity spaces. What’s more, we can continue with our other activities on the go while still not being distracted from the road, leading us to the next trend. Advanced Driver Assistance Systems The advanced driver assistance system (ADAS) is designed to reduce the driver’s workflow during the driving process itself. It is based on embedded vision technology, consisting of vision systems surrounding the vehicle, looking to place it within a protective bubble against driver error, road obstacles, other vehicles, and pedestrians. These vision systems are capable of identification and real-time tracking. They usually require specialized knowledge of image acquisition and processing techniques. However, today the development of these complex systems have been simplified. The dedicated vision processors and multicore CPUs have put the sophisticated vision capabilities in most engineers’ hands. There are even some development kits that lower the barriers to entry into embedded vision technologies. That means they are getting more and more widespread among new vehicles. Advanced Motor Control Modern vehicles are filled with dedicated motor-control systems, which drive fans, pumps, compressors, and servomechanisms of all types. The growing desire for maximum efficiency and control has motivated engineers to move beyond traditional scalar control systems to more sophisticated digital vector control algorithms capable of delivering full torque with acceleration and deceleration at rates that can be precisely managed. Many cost-effective solutions are developed to provide maximum control capability and enable engineers to harness the power of advanced vector control methods. These sophisticated methods provide great flexibility and present designers with some challenges. That’s why the achievement of stable operation through all corner cases of a vector control design can demand highly specialized knowledge and often leads to slips in tight development cycles. However, advanced motor control is a tech trend that provides an improved driver experience. Predictive Technology Artificial intelligence and machine learning impact almost all technological aspects. They have an essential role in the future of the automotive industry as well. Predictive capabilities are now becoming prevalent in cars. They provide a highly personalized driving experience. Manufacturers are applying AI and ML algorithms to automate the setting up process of a vehicle, including its infotainment system and its application preferences. That makes vehicles our new IoT devices that connect to our smartphones or wearable devices and actually understand us. The predictive technologies could also be implemented as sensors within a car. They can inform the driver if the vehicle needs service. They also estimate its performance, depending on the mileage and condition.  Vehicle-to-Everything Communication As we already noted above, connectivity is among the key trends in the automotive industry. You’ve seen the IoT trend above as well. However, this one goes beyond network connectivity.  It’s already changing the future of driving. Also, Intelligent traffic systems will be created to avoid collisions, send emergency vehicle notifications to provide car diagnostics and manage to park. The vehicle-to-everything technology will send real-time traffic notifications, accident alerts, and other warnings. It’s set to increase traffic safety, sent forward-collision warnings to detect obstacles and offer safety measures. This technology will take us a step closer to smart roadways and a safer driving experience.

Five Technology Trends in Automotive Industry Read More »

Emerging trends in Automotive embedded systems and applications

The embedded industry was born with the invention of microcontrollers/microprocessors and since then it has evolved into various forms, from primarily being designed for machine control applications to various other new verticals with the convergence of data communications.  Various classes of embedded systems such as media systems for homes, portable players, smartphones, embedded medical devices and sensors, automotive embedded systems have surrounded us and with continued convergence of data communications and computing functions within these devices, embedded systems are transforming themselves into really complex systems, thus creating newer opportunities and challenges to develop and market more powerful, energy-efficient processors, peripherals and other accessories. An embedded system is more than electronics as most people perceive it. It has electronics – both digital and analogue, special purpose sensors and actuators, software, mechanical items etc., and with design challenges of space, weight, speed, cost and power consumption. Its important characteristics are low-power, real-time responsiveness, low thermal dissipation, predictable, small physical form factor/footprint, low radiation/emission, ruggedness in design and impervious to external radiations etc. To achieve key requirements, generally, embedded systems are restricted to limited resources in terms of computing, memory, display size etc. With the continued convergence of other technologies, a lot more functionalities are being pushed into embedded devices that were once part of traditional computing platforms. This further adds a major “decision challenge” for architects and product managers on the selection of processors, operating systems, standards of usage etc., as demands on functionality increase with time to market decreases.  Automotive Embedded System With drive across the world to improve on emission controls and bring in efficiency in usage of fossil fuels, the automotive segment is challenged by various factors and embedded systems are the ways and means of achieving multiple objectives in this segment taking it from infotainment systems, engine control unit, Car-area-network, fuel management, safety systems all need to be embedded to be in it.  Traffic management and prediction systems are being developed for large cities across the world today and the critical systems that have to support this are M2M or V2V communication networks that, form adhoc networks, seamlessly gather information from multiple sources, fuse and make decisions that not only help the car users but also city traffic managers.  The real-time management of this is possible only by having embedded computing and communication systems that are part of the vehicle and the network. The usage of vehicle tracking and fleet tracking has already been beneficial for the operators by reducing their OPEX and downtime which has enhanced customer satisfaction.  This apart, media-oriented systems transport (MOST) is one of the technologies being deployed by OEMs for multimedia and infotainment networking. This technology is designed to provide an efficient and cost-effective fabric to transmit audio, video, data and control information between devices attached even to the harsh environment of an automobile. MOST MOST (Media Oriented Systems Transport) is a high-speed multimedia network technology optimized by the automotive industry. It can be used for applications inside or outside the car. The serial MOST bus uses a daisy-chain topology or ring topology and synchronous data communication to transport audio, video, voice and data signals via plastic optical fiber (POF) (MOST25, MOST150) or electrical conductor (MOST50, MOST150) physical layers. MOST technology is used in almost every car brand worldwide, including Audi, BMW, General Motors, Hyundai, Jaguar,Lancia, Land Rover, Mercedes-Benz, Porsche, Toyota, Volkswagen, SAAB, SKODA, SEAT and Volvo. SMSC and MOST are registered trademarks of Standard Microsystems Corporation (“SMSC”), now owned by Microchip Technology. The first multimedia installation based on MOST bus and protocol was introduced in the year 2001. In the same year, the MOST bus was applied in the next ten vehicle models. In the year 2013, MOST Cooperation consortium could report MOST introduction into 140 vehicle models including new models i.e. Audi A3 and Mercedes class S. MOST bus and protocol have been present in popular medium segment vehicles e.g. Volkswagen Golf and Opel Insignia as well as the models: Rolls Royce Ghost, Phantom and Wraith. The functioning of the majority of wire communication buses in motor vehicles is based on a linear bus topology. Therefore MOST bus is a unique solution because it is based on ring topology (Fig. 1). The application of fiber optic solutions is another specific feature. Communication via cable connections is possible after the transceivers replacement. MOST bus operation is typical for ring topology. The data block received from the preceding node is used as an information and commands source. The block received from the preceding node is regenerated and forwarded. Turned off devices transmit the optical signal without its analysis. The data transfer is finished when the block is received by its sender. The ring contains some special nodes responsible for the ring management i.e. commands generation based on user activity and for the ring synchronization (Fig. 1b). MOST protocol and bus are dedicated to multimedia networks which are sometimes called Infotainment networks. High throughput levels are required for data stream in such networks. Despite MOST150 standard functioning for several years, this fact has been not mentioned in many publications. Most often the graphical presentations inform about the throughput of about 25 Mbps (Fig. 2)which is underestimated by three times. The throughput of 150 Mbps will be probably exceeded soon. The manufacturers of Plastic Optical Fibers (POF) indicate the throughputs of 500 Mbps along the section of 20 m or 170 Mbps along the section of 115 m. The transceiving equipment is prepared for operation with a throughput of 5 Gbps. The current throughput is sufficient to use MOST as an element in the network supporting images received from the security camera or the games network.

Emerging trends in Automotive embedded systems and applications Read More »

Dynamic Memory Allocation

Dynamic Memory Allocation is defined as a process where the size of a data structure can be modified during the run time. There are certain predefined functions which can implement the above condition.There are 4 library functions provided by C all of which are defined under <stdlib.h> header file to facilitate dynamic memory allocation in C programming. They are: malloc() “malloc” or “memory allocation” method is used to allocate a single large block of memory baes on the specified size. The return type of malloc is of type void pointer which can be typecast-ed to any form.It initializes each block with a default value therefore some garbage value. Syntax: int *ptr = (cast-type*) malloc(byte-size) For Example:  int *ptr = (int*) malloc(100 * sizeof(int)); Since the size of int is 4 bytes, this statement will allocate 400 bytes of memory. And, the pointer ptr holds the address of the first byte in the allocated memory. calloc() “calloc” or “contiguous allocation” method is used to allocate specified number of blocks of memory baes on the specified type. It initializes each block with a default value ‘0’. Syntax: int *ptr = (cast-type*)calloc(n, element-size); For Example: int *ptr = (float*) calloc(25, sizeof(float)); This statement allocates contiguous space in memory for 25 elements each with the size of float. free() “free” method is used to de-allocate the memory or free the memory which was occupied by using the functions malloc() and calloc(),as they do not de-allocated on their own. Hence the free() method is used, whenever the dynamic memory allocation takes place. It helps to reduce wastage of memory by freeing it. Syntax: free(ptr); realloc() “realloc” or “re-allocation” method is used to dynamically modify the memory allocation of a previously allocated memory. The memory previously allocated with the help of malloc or calloc is insufficient, realloc can be used to dynamically re-allocate memory. Syntax: int*ptr = realloc(ptr, newSize); where ptr is reallocated with new size ‘newSize’

Dynamic Memory Allocation Read More »

Dual booting Windows and Linux using UEFI

Firmware Dual booting is not just a matter of software. Or, it is, but it involves changing your firmware, which among other things tells your machine how to begin the boot process. Here are some firmware-related issues to keep in mind. UEFI vs. BIOS Before attempting to install, make sure your firmware configuration is optimal. Most computers sold today have a new type of firmware known as Unified Extensible Firmware Interface (UEFI), which has pretty much replaced the other firmware known as Basic Input Output System (BIOS), which is often included through the mode many providers call Legacy Boot. Secure Boot One other important setting is Secure Boot. This feature detects whether the boot path has been tampered with, and stops unapproved operating systems from booting. For now, I disabled this option to ensure that I could install Fedora Linux. According to the Fedora Project Wiki Features/Secure Boot Fedora Linux will work with it enabled. This may be different for other Linux distributions. In short, if you find that you cannot install your Linux OS with this setting active, disable Secure Boot and try again. Partitioning the boot drive If you choose to dual boot and have both operating systems on the same drive, you have to break it into partitions. Even if you dual boot using two different drives, most Linux installations are best broken into a few basic partitions for a variety of reasons. Here are some options to consider. GPT vs MBR If you decide to manually partition your boot drive in advance, I recommend using the GUID Partition Table (GPT) rather than the older Master Boot Record (MBR). Among the reasons for this change, there are two specific limitations of MBR that GPT doesn’t have: The EFI system partition If you are doing a fresh installation or using a new drive, there are probably no partitions to begin with. In this case, the OS installer will create the first one, which is the EFI System Partition (ESP). If you choose to manually partition your drive using a tool such as gdisk, you will need to create this partition with several parameters. Based on the existing ESP, I set the size to around 500MB and assigned it the ef00 (EFI System) partition type. The UEFI specification requires the format to be FAT32/msdos, most likely because it is supportable by a wide range of operating systems. Operating System Installation Once you accomplish the first two tasks, you can install your operating systems. While I focus on Windows 10 and Fedora Linux here, the process is fairly similar when installing other combinations as well. Windows 10 I started the Windows 10 installation and created a 20 Gigabyte Windows partition. Since I had previously installed Linux on my laptop, the drive had an ESP, which I chose to keep. I deleted all existing Linux and swap partitions to start fresh, and then started my Windows installation. The Windows installer automatically created another small partition—16 Megabytes—called the Microsoft Reserved Partition (MSR). Roughly 400 Gigabytes of un-allocated space remained on the 512GB boot drive once this was finished. I then proceeded with and completed the Windows 10 installation process. I then rebooted into Windows to make sure it was working, created my user account, set up wi-fi, and completed other tasks that need to be done on a first-time OS installation. Fedora Linux I next moved to install Linux. I started the process, and when it reached the disk configuration steps, I made sure not to change the Windows NTFS and MSR partitions. I also did not change the EPS, but I did set its mount point to /boot/efi. I then created the usual ext4 formatted partitions, / (root), /boot, and /home. The last partition I created was Linux swap. As with Windows, I continued and completed the Linux installation, and then rebooted. To my delight, at boot time the GRand Unified Boot Loader (GRUB) menu provided the choice to select either Windows or Linux, which meant I did not have to do any additional configuration. I selected Linux and completed the usual steps such as creating my user account.

Dual booting Windows and Linux using UEFI Read More »

Enquire Now

Enquire Now

Enquire Now

Please Sign Up to Download

Please Sign Up to Download

Enquire Now

Please Sign Up to Download





    [group student clear_on_hide]

    [/group]

    [group graduated clear_on_hide]

    [/group]

    [group wp clear_on_hide]

    [/group]

    [group student-course clear_on_hide]

    [/group]

    [group graduated-course clear_on_hide]

    [/group]

    [group work-course clear_on_hide]

    [/group]


    Enquiry Form